How to get second-to-last argument from previous bash command? (in an interactive bash shell)
如何在bash交互式shell中轻松获取上一个命令中的倒数第二个(倒数第二个)单词/参数?我经常在后台运行命令,我想获取在
1 2 3 | % echo foo > /tmp/foo & % cat !$ % & |
在上面的示例中,
请注意,可以使用类似
1 2 3 | % (set -x; date; pwd; git status; git diff; git log | tail -30; date; args=--verbose time make test; date) >& /tmp/log/make.test.20150122-Thu-0834 & % echo !-1:30 /tmp/log/make.test.20150122-Thu-0834 |
上面的示例有效,但您必须计算并知道您想要的单词是第30个单词,这非常耗时且容易出错。
有一个简单的方法来获得倒数第二个(倒数第二个)单词吗?
(请注意,此问题是指交互式shell中前一个命令的参数,而不是指从命令行传递给shell脚本的参数,因为这里的一些答案和注释是指。)
通过交互方式,您可以使用默认绑定使用esc - 1 esc .获取上一个命令行的倒数第二个参数。
更一般地,序列esc .从前一个命令行获取最终令牌,您可以传递一个数字参数来指定另一个(例如,esc 1 esc .获取第一个参数,并且esc 0 esc .获取命令本身)。
esc是Meta的关键绑定之一;在许多现代键盘上,您也可以将Alt用作Meta(同时按下它,而不是作为前缀修饰符)。我更喜欢esc作为meta,因为当我的肌肉记忆学到这些东西时,我们没有(可靠的,一致的)Alt键,它仍然可以移植到VT100和Sun键盘;至少在我当前的键盘上(Mac OSX Yosemite),例如alt--除了指定否定数字参数之外还执行其他操作。
来自之前的复合命令
1 | echo moo; echo bar |
序列esc 2 esc .得到分号,因为这是第二个令牌。
我确信有
使用此命令使用历史记录中最后一个命令的第3个参数运行命令:
1 2 | echo foo > /tmp/foo & cat !-1:3 |