Bash

如何從環境變數執行命令並讓內部尾隨 & 號工作?

  • December 18, 2019

我有這個我稱之為的小腳本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-runlong-running-script得到我想要的?

對變數展開的唯一處理是分詞和萬用字元展開。其他 shell 元字元將被忽略。

如果您希望變數的內容像鍵入命令一樣執行,請使用以下eval命令:

eval "$prompt_acc"

這將執行命令的所有正常 shell 處理,包括引用處理、執行由 分隔的多個命令;、後台處理&、I/O 重定向等。

順便說一句,prompt_acc只是一個普通的 shell 變數,它不是環境變數。該export命令是將變數放入環境的方法。

你是對的,原因是它是從環境變數內部執行的。因此,包括 在內的整個後續文本&將作為參數傳遞給您的long-running-script.

解決方法是使用呼叫$prompt_acc &而不是$prompt_acc在您的prompt-to-run文件中。這樣,如果您決定不想執行腳本,則&不會妨礙您。

引用自:https://unix.stackexchange.com/questions/557721