在執行之前展開子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:歷史與別名擴充行

這是收集到的從這個博客, 和關於超級用戶的這個問題,這非常相似:

相關內容