在执行之前展开子shell?

在执行之前展开子shell?

我经常使用子 shell 运行命令,有时希望在运行某些操作之前扩展子 shell。这样我就可以验证我正在做什么,并可能编辑即将发生的事情。

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

例如

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

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

我希望看到子 shell 扩展我运行命令,如下所示:

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

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

答案1

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 (如果需要,创建文件):

Control-x:shell 扩展行

请注意,您还可以使用以下任一方法来仅扩展历史记录或您的别名,或两者都扩展:

Control-x:历史扩展行

或者

Control-x:别名扩展行

或者

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

这是收集到的从这个博客, 和关于超级用户的这个问题,这非常相似:

相关内容