在执行子壳之前先展开它?


11

我经常使用子外壳运行命令,有时希望在运行某些东西之前先扩展子外壳。

例如,如何在运行之前扩展以下命令行,以便可以编辑子shell的结果?

例如

$ find -name "test.txt" 
/tmp/test.txt

$ mv $(!!) /tmp/new.txt

我希望运行命令之前看到子外壳已扩展,如下所示:

$ mv /tmp/test.txt /tmp/new.txt

有什么办法可以做到这一点?


1
zsh可以做到这一点,但是我相当确定bash不能。在zsh中,如果将光标放在参数上,然后单击TAB,它将对其进行扩展
Patrick

从那以后,我就切换到了zsh,这很不错,您可以建议这样做。我将原来的答案留在这里,因为这是一个bash问题。
布拉德·帕克斯

Answers:


5

shell-expand-line\e\C-e)扩展bash中的命令替换。

$ bind -p|grep shell-ex
"\e\C-e": shell-expand-line

$(!!)\e\C-e 将再次运行前面的命令并插入输出:

"\eo": "$(!!)\e\C-e"

它还扩展了其他命令替换,但是没有类似的命令shell-expand-word

在bash 4.0或更高版本中,您还可以启用globstar,键入**/file.txt并使用glob-complete-word\eg)或glob-expand-word\C-x*)。


2

这是一个方便的技巧—将这一行添加到〜/ .inputrc(如有必要,创建文件):

Ctrl-x:shell展开线

请注意,您还可以执行以下任一操作以仅扩展历史记录或扩展您的别名,或同时扩展这两者:

Ctrl-x:历史记录扩展行

要么

Ctrl-x:别名扩展行

要么

Ctrl-x:历史和别名扩展行

这是从此Blog中收集的,以及有关SuperUser的问题该问题非常相似:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.