点击按钮后运行 Shell 脚本 - YAD

点击按钮后运行 Shell 脚本 - YAD

我有三个 shell 脚本,我想在单击 yad 中的按钮后运行每个脚本 - 假设 - 我有一个带有三个按钮的 yad 会话 - 如果我单击一个按钮,我将打开 1. 脚本 - 第二个按钮打开 2. 脚本等等..请参阅下面的示例 -

#!/bin/bash
files=$(yad --width 100 --height 100 --title "Choose the Shell Script" \
    --text="  Please enter analysis details:" \
    --button="ShellScript1:2" \
    --button="ShellScript2:3" \
    --button="ShellScript3:3" \
    --button="Cancel:1" \
    --on-top \
    --center \
)

ret=$?
[[ $ret -eq 1 ]] && exit 0

感谢您的任何想法或帮助。

答案1

我只是添加条件:

ret=$?

[[ $ret -eq 1 ]] && exit 0

if [[ $ret -eq 2 ]]; then

      /path/to/shell/1.sh
fi

if [[ $ret -eq 3 ]]; then

    /path/to/shell/2.sh

fi

答案2

替代方案:1. 您可以使用 case 代替 if,如下所示:

case $ret in
    1) /path/to/script1 ;;
    2) /path/to/script2 ;;
    3) /path/to/script3 ;;
esac
  1. 您也可以直接从每个按钮调用脚本,而无需使用以下语法来操作 $? 返回代码:

    --button="ShellScript1:bash /path/to/script1.sh"

在我与 yad list 类似的脚本中,这个运行良好:

yad --list --width=800 --height=600 --center \
    --button="Display":"/home/gg/Tests/yadabout.sh" --button="Cancel":0  \
    --column "ID" --column "File" \
    --column "Exec" "${list[@]}") 

区别:当您为每个按钮分配一个退出代码/id 时,按下按钮后,yad 会将其值返回给变量(代码中的文件),然后 yad 对话框退出。

如果您为按钮分配了要运行的命令(上述情况 2),则 yad 对话框将保留在屏幕上并且不会退出。但在此模式下没有 yad 返回值,因此您无法将 yad 对话框中的选择解析为此外部命令/脚本(不是 100% 确定,但我还没有找到任何方法来实现它)。

答案3

详细说明之前的回复:

processes=$(yad --width 100 --height 100 --title "Chose Process" --text="Select" --button="Run Cmd":1 --on-top --center)
ret=$?
if [[ $ret -eq 1 ]]; then
  /path/process.sh
fi

相关内容