Как определить, нажал ли пользователь на & ldquo; Quit & rdquo; в списке зенитности

Это мой код:

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, и здесь результат здесь .

1
задан 5 July 2018 в 10:54

1 ответ

$? - это состояние выхода, которое является целым числом и никогда не может быть «Выход». Но если пользователь нажал «Выйти», 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.

0
ответ дан 5 July 2018 в 10:54

Другие вопросы по тегам:

Похожие вопросы: