这是我的代码:
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 之外的退出状态。