これは私のコードです:
while true; do
choice=$(zenity --list --text "Users are listed below." --title "Result" --ok-label="Back to Menu" --cancel-label="Quit" --column=Users $(cut -d : -f 1 /etc/passwd))
if [ "$choice" = "root" ]
then
echo 'You have clicked on root'
fi
if [["$?" = "Quit"]]
then
exit
fi
done
ご覧のとおり、最初にシステム上のアクティブなユーザーのリストが表示されます。ユーザーが「ルート」をクリックした場合は「あなたはルートをクリックしました」と表示し、ボタンをクリックした場合は何か他の操作を実行します(「終了」および「メニューに戻る」など)。
注:よく検索しましたが、関連する質問が山ほどあります。しかし、私の質問に対する正確な答えはありません。
編集:コードを変更しましたが、問題は何もエコーしないことです。
while true; do
choice=$(zenity --list --text "Users are listed below." --title "Result" --ok-label="Back to Menu" --cancel-label="Quit" --column=Users $(cut -d : -f 1 /etc/passwd))
if [ "$?" != 0 ]
then
exit
fi
if [ "$choice" = "root" ]
then
echo 'You have clicked on root'
fi
done
それが関連しているかどうかはわかりません。しかし、私はubuntu 18.04を使用しています
編集2:bash -xを使用してスクリプトを実行しましたが、結果は here です。
$?
は終了ステータスで、整数であり、「Quit」になることはありません。ただし、ユーザーが[終了]をクリックした場合、zenityはステータス1で終了し、ユーザーが[OK]ボタンをクリックした場合は0で終了します。
$ choice=$(zenity --list --text "Users are listed below." --title "Result" --ok-label="Back to Menu" --cancel-label="Quit" --column=Users $(cut -d : -f 1 /etc/passwd))
# clicked Quit
$ echo $?
1
だからあなたができる:
choice=$(zenity --list --text "Users are listed below." --title "Result" --ok-label="Back to Menu" --cancel-label="Quit" --column=Users $(cut -d : -f 1 /etc/passwd))
if [ "$?" != 0 ]
then
exit
fi
if [ "$choice" = "root" ]
then
echo 'You have clicked on root'
fi
0
と比較することをお勧めします。他の障害状態により、0または1以外の終了ステータスが発生する可能性があるためです。