私はそれを使用してgdialog
ユーザー入力を受け取り、それをシェルのスイッチケースに供給する予定です。以下は私のコードです。
#!/bin/sh
which gdialog 2> /dev/null && DIALOG=gdialog || DIALOG=dialog
end () {
# rm -f $FILE1 $FILE2 $ERROR
echo "User pressed cancel!"
exit
}
while true
do
choice=$($DIALOG --title "Messenger" --menu "Command" 8 35 8 \
"Date" "Get today's date" \
"Time" "Get today's time")|| end
# echo $choice
case "$choice" in
"Date")
MSG="Date is requested"
echo $MSG
$DIALOG --yesno "$MSG" 7 20 || end
;;
"Time")
MSG="Time is requested!"
$DIALOG --yesno "$MSG" 7 20 || end
;;
esac
done
問題は、スイッチケースが実行され、制御フローが最初のケースまたは2番目のケースに達しましたが、MSG
変数宣言の後の行は実行されないことです。はい/いいえを使用してユーザーに続行するかどうかを尋ねますgdialog
。私がここで何を間違っているのか?
ベストアンサー1
コマンド置換は、コマンドの標準出力に置き換えられます。ダイアログボックスはstdoutを使用してUIを表示しますが、gdialog afaikはこれをまったく使用しません。どちらもstderrを使用して結果を返します。
スクリプトが期待どおりに動作するようにする1つの方法は、コマンドの置き換えでstdoutをstderrに置き換えることです。
choice=$($DIALOG --title "Messenger" --menu "Command" 8 35 8 \
"Date" "Get today's date" \
"Time" "Get today's time" 3>&2 2>&1 1>&3)|| end