2009-12-28 97 views
10

我試圖使用whiptail,因爲它是dialog的輕量級替代品,並且似乎在大多數系統中默認安裝(即,如果人們「忘記」或未安裝它,人們不必四處走動並安裝它默認)。 我在這裏查了一下question #1562666的幾個例子,但我正在尋找一個重定向輸出的替代方法,以便設置一個環境變量,而不是僅僅寫入磁盤。whiptail:如何將輸出重定向到環境變量?

例如,當我嘗試與對話,這個工作(我看到了對話框,以及環境變量設置):

result=$(dialog --output-fd 1 --inputbox "Enter some text" 10 30) 
echo Result=$result 

然而,這並不用鞭尾時,到位的工作對話框,因爲對話框永遠不會顯示。我必須把它重定向到一個磁盤文件,讀取它,例如:

result=$(tempfile) ; chmod go-rw $result 
whiptail --inputbox "Enter some text" 10 30 2>$result 
echo Result=$(cat $result) 
rm $result 

它的工作原理,我可以使用相同的臨時文件,從開始到結束(腳本結束時刪除它)。但是被迫僅僅爲了這個而使用磁盤,而不是將它全部保存在內存中(重定向到一個環境變量),感覺很尷尬。

所以我問:我忘了什麼 - 或者我真的必須在使用whiptail時使用磁盤?

非常感謝您的反饋。

+0

好像每當鞭尾有其標準輸入/標準輸出重定向,它不顯示(是否用$(...)或... |)。 考慮到whiptail的行爲,您的解決方案看起來相當不錯。 順便說一句,在我的debian機器上,我有whiptail,但默認情況下沒有對話框,在opensuse上,我有對話框,並且在官方存儲庫中沒有現有的whiptail。 – Zeograd 2009-12-28 16:30:35

+0

@Zeograd至少在RHEL whiptail進來「蠑螈」包。 – Kimvais 2009-12-28 16:34:50

+0

對,thx Kimvais。 「zypper search whiptail」對我來說失敗了,即使信息說明它已經在。 – Zeograd 2009-12-28 19:33:13

回答

28

這可能是因爲鞭尾使用標準輸入和標準輸出打印的輸入框,所以你不能直接重定向錯誤輸出到標準輸出,但需要交換它們,例如:

foobar=$(whiptail --inputbox "Enter some text" 10 30 3>&1 1>&2 2>&3) 
+4

我驗證了上述工作。 – 2009-12-28 16:32:33

+2

標記爲WORKSFORME。 感謝Kimvais! – jbatista 2009-12-29 11:26:27

+0

我有一個問題。爲什麼你把whiptail的末尾加上'3>&1 1>&2 2&&3'?沒有它的命令不起作用,但我不知道爲什麼。 – 2017-07-19 20:35:10

2

看來,whiptail(1)根據TERM環境變量的設置將其控制輸出寫入終端。因此,您不能使用whiptail(1)的標準輸出流來設置變量。此外,whiptail(1)將輸入框的用戶輸入寫入標準錯誤流,因此您再也不能使用其標準輸出流設置變量。