Shell

在後台執行時獲取使用者輸入

  • November 22, 2011

我正在編寫一個腳本,提示使用者輸入並在之後進行一些處理。我read用來獲取數據,但後來我注意到,當使用鍵盤快捷鍵執行腳本時(我在 Ubuntu 的鍵盤快捷鍵列表中添加了一個條目),它會忽略read並繼續其餘程式碼。

如何使用這樣在後台執行的腳本讀取使用者輸入?

如果我理解正確,您是直接從 GUI 環境執行腳本,而不是從終端內部。

終端為腳本提供了一種接收輸入的方式。如果您通過菜單項或鍵盤快捷鍵從 GUI 執行腳本,則腳本的輸入不會連接任何內容(呼叫 this nothing /dev/null),因此當您要求讀取一行時,該read命令會顯示沒有可讀取的內容(文件結尾)。

您有兩種解決方案:更改呼叫腳本的方式,或更改腳本。前者更簡單,有時允許您的腳本在終端內執行。後者更複雜但更靈活。

您可以輕鬆更改腳本以在終端中執行。不要為 設置鍵盤快捷鍵/path/to/script,而是為xterm -e /path/to/scriptgnome-terminal -e /path/to/script或您喜歡的任何終端模擬器設置鍵盤快捷鍵。終端視窗將在您按下鍵後立即出現,並在腳本終止時消失。

或者,您可以更改腳本以通過 GUI 視窗而不是從其標準輸入讀取輸入。Zenity是一個常見的選擇(有一個Ubuntu 軟體包 Install zenity http://bit.ly/software-small)。在您的腳本中,您可以使用[ -t 0 ]它來測試它是否在終端中執行。

if [ -t 0 ]; then
 echo "What is your favorite color?"
 read -r color
else
 color=$(zenity --entry --text "What is your favorite color?")
fi

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