スイッチケースがシェルで動作しない

スイッチケースがシェルで動作しない

私はそれを使用して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

おすすめ記事