如何從環境變數執行命令並讓內部尾隨 & 號工作?
我有這個我稱之為的小腳本
prompt-to-run
。prompt_acc='' read -p 'run `'"$1"'` ' -i "$1" -e prompt_acc $prompt_acc
它讓我可以創建一個為我填寫命令的腳本,但讓我有機會在不停止整個腳本的情況下編輯或跳過執行它。
我有一個不同的腳本,我們可以稱之為
long-running-script
我想執行它我想在它自己的終端中執行,因為在接受一些輸入之後它坐在那裡並連續輸出更多文本。我希望能夠從包含多個prompt-to-run
呼叫的腳本開始執行它,然後取回我原來的終端,這樣我就可以執行下一個prompt-to-run
呼叫。我已經在
long-running-script
內部打開了一個新終端,所以手動輸入long-running-script &
啟動我想要執行的程序,並在原始終端中返回我的提示。但
prompt-to-run 'long-running-script &'
不返回終端提示。我想這是因為該命令是從環境變數內部執行的$prompt_acc
,所以它沒有按照我想要的方式進行解釋。有沒有辦法改變一個或兩個
prompt-to-run
或long-running-script
得到我想要的?
對變數展開的唯一處理是分詞和萬用字元展開。其他 shell 元字元將被忽略。
如果您希望變數的內容像鍵入命令一樣執行,請使用以下
eval
命令:eval "$prompt_acc"
這將執行命令的所有正常 shell 處理,包括引用處理、執行由 分隔的多個命令
;
、後台處理&
、I/O 重定向等。順便說一句,
prompt_acc
只是一個普通的 shell 變數,它不是環境變數。該export
命令是將變數放入環境的方法。
你是對的,原因是它是從環境變數內部執行的。因此,包括 在內的整個後續文本
&
將作為參數傳遞給您的long-running-script
.解決方法是使用呼叫
$prompt_acc &
而不是$prompt_acc
在您的prompt-to-run
文件中。這樣,如果您決定不想執行腳本,則&
不會妨礙您。