繁体   English   中英

如何从上一个 bash 命令中获取倒数第二个参数? (在交互式 bash shell 中)

[英]How to get second-to-last argument from previous bash command? (in an interactive bash shell)

如何从 bash 交互式 shell 中的上一个命令轻松获取倒数第二个(倒数第二个)单词/参数? 我经常在后台运行命令,我想获取&之前指定的文件,例如,

  % echo foo > /tmp/foo &
  % cat !$
  % &

在上面的示例中, !$给出最后一个单词& 但我想要倒数第二个参数, /tmp/foo



请注意,可以使用范围为!-1: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 个单词,这既耗时又容易出错。

有没有一种简单的方法来获得倒数第二个(倒数第二个)单词?

更新:请注意,我正在寻找要在命令行上键入的内容(例如,历史扩展,如!!事件指示符$字指示符),而不是使用readline 键绑定(例如, esc键)。

(请注意,这个问题指的是交互式 shell 中前一个命令的参数,而不是从命令行传递给 shell 脚本的参数,正如这里的一些答案和评论所指的那样。)

交互式地,您可以使用esc - 1 esc获取上一个命令行的倒数第二个参数 使用默认绑定。

更一般地,序列esc 从上一个命令行获取最终标记,您可以向它传递一个数字参数以指定不同的标记(例如, esc 1 esc .获取第一个参数,而esc 0 esc .获取命令本身)。

esc是 Meta 的键绑定之一; 在许多现代键盘上,您也可以将Alt用作 Meta(您同时按下它,而不是作为前缀修饰符)。 我更喜欢esc作为元,因为当我的肌肉记忆学到这些东西时,我们没有(可靠的、一致的)Alt 键,而且它仍然可以一直移植到 VT100 和 Sun 键盘; 至少在我当前的键盘(Mac OSX Yosemite)上,例如alt - -除了指定负数字参数之外还做其他事情。

从以前的复合命令像这样

echo moo; echo bar

序列esc 2 esc 获取分号,因为这是第二个标记。

我确定有办法! 历史扩展也是如此,但我非常喜欢看看我在做什么。 此机制将您想要引用的文本带入当前命令行,因此您也可以根据需要对其进行编辑。

使用此命令使用历史记录中最后一个命令的第三个参数运行命令:

echo foo > /tmp/foo &
cat !-1:3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM