我經常使用子 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:歷史與別名擴充行
這是收集到的從這個博客, 和關於超級用戶的這個問題,這非常相似: