Это мой код:
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
Как видите, сначала отображается список активных пользователей в системе. Я хочу, чтобы моя крошечная программа напечатала «Вы нажали на root», если пользователь нажал на «root», и сделайте что-нибудь еще, если он / она нажал на кнопки (включая «Выход» и «Вернуться в меню»). [ 114]
Примечание: я много искал и знаю, что есть множество вопросов, которые связаны между собой. Но ни один из них не имеет точного ответа на мой вопрос.
Редактировать: я изменил свой код, и теперь проблема в том, что он ничего не отображает.
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, и здесь результат здесь .
$?
- это состояние выхода, которое является целым числом и никогда не может быть «Выход». Но если пользователь нажал «Выйти», zenity выйдет со статусом 1 и 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.