Shell
在後台執行時獲取使用者輸入
我正在編寫一個腳本,提示使用者輸入並在之後進行一些處理。我
read
用來獲取數據,但後來我注意到,當使用鍵盤快捷鍵執行腳本時(我在 Ubuntu 的鍵盤快捷鍵列表中添加了一個條目),它會忽略read
並繼續其餘程式碼。如何使用這樣在後台執行的腳本讀取使用者輸入?
如果我理解正確,您是直接從 GUI 環境執行腳本,而不是從終端內部。
終端為腳本提供了一種接收輸入的方式。如果您通過菜單項或鍵盤快捷鍵從 GUI 執行腳本,則腳本的輸入不會連接任何內容(呼叫 this nothing
/dev/null
),因此當您要求讀取一行時,該read
命令會顯示沒有可讀取的內容(文件結尾)。您有兩種解決方案:更改呼叫腳本的方式,或更改腳本。前者更簡單,有時允許您的腳本在終端內執行。後者更複雜但更靈活。
您可以輕鬆更改腳本以在終端中執行。不要為 設置鍵盤快捷鍵
/path/to/script
,而是為xterm -e /path/to/script
或gnome-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