在执行之前展开子shell?

Bra*_*rks 12 shell bash command-history subshell

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

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

例如

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

$ mv $(!!) /tmp/new.txt
Run Code Online (Sandbox Code Playgroud)

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

$ mv /tmp/test.txt /tmp/new.txt
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

Lri*_*Lri 5

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

$ bind -p|grep shell-ex
"\e\C-e": shell-expand-line
Run Code Online (Sandbox Code Playgroud)

$(!!)\e\C-e 将再次运行上一个命令并插入输出:

"\eo": "$(!!)\e\C-e"
Run Code Online (Sandbox Code Playgroud)

它还扩展了其他命令替换,但没有像shell-expand-word.

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