如何检测用户是否单击了 zenity 列表中的“退出”

如何检测用户是否单击了 zenity 列表中的“退出”

这是我的代码:

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”,如果用户单击了按钮(包括“退出”和“返回菜单”),则执行其他操作。

注意:我搜索了很多,我知道有很多相关的问题。但没有一个能准确回答我的问题。

编辑:我更改了我的代码,现在的问题是它没有回应任何内容。

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

$?是退出状态,它是一个整数,并且永远不会是“退出”。但是,如果用户确实单击了“退出”,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 之外的退出状态。

相关内容