取消 zenity 按钮的使用

取消 zenity 按钮的使用

这个问题很简单,zenity 上每个页面都有 2 个按钮,确定和取消。使用我的脚本,我设法将 zenity 代码分配给一个变量,我可以在变量中为日历选择一个日期。我想将取消按钮用于我的日程安排,所以我重命名了它,但我不知道如何让它工作!谢谢

#!/bin/bash
calendarinput=$(zenity --calendar \
--title "Scheduler" \
--text "Pick a date" \
--ok-label "Done" --cancel-label "Agenda" \
--date-format "%A %d/%m/%y")

agenda+="$calendarinput"
unset calendarinput
calendarinput="Done"

if [ "$calendarinput"="Done" ];then
    remind=$(zenity --entry)
    agenda+="$remind\n"
fi

zenity --info \
--text "$agenda"

这是我的脚本的唯一一个功能。在此之前还有另一个列表菜单。

答案1

您可以在特殊参数中找到按钮的返回代码$?,该参数保存了上次执行的命令的退出代码。它可以是 0、1 或 5,具体取决于用户是否按下了“确定”、“取消”或“超时”。

#!/bin/bash

calendarinput=$(zenity --calendar \
--title "Scheduler" \
--text "Pick a date" \
--ok-label "Done" --cancel-label "Agenda" \
--date-format "%A %d/%m/%y")

ret=$?

if ((ret==0)); then
    echo "Done"
else
    echo "Agenda"
fi

if 语句中的表达式需要用空格分隔:

if [ "$calendarinput" = "Done" ]; then

(它也总是评估为真的,这使得它有点不必要)。

答案2

使用 case esac 而不是 if fi 进行设置

zenity --whatever
case $? in
    0) whatever.script #this is pressing ok
    ;;
    1) $1 # this is pressing cancel
    ;;
    *) $1 #this is closing window etc $1 will kill process
    ;;
esac

相关内容