我经常使用子 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:历史和别名扩展行
这是收集到的从这个博客, 和关于超级用户的这个问题,这非常相似: