Запустить Shell Script после нажатия на кнопку - YAD

У меня есть три сценария оболочки, и я хотел бы запустить каждый сценарий после нажатия на кнопку в yad - скажем, - у меня один сеанс yad с тремя кнопками - если я нажму на одну кнопку, я открою 1. script - вторая кнопка открыта 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

Спасибо за любую идею или помощь.

3 ответа

Решение

Я просто добавляю условие:

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

Альтернативы: 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 --width=800 --height=600 --center \
    --button="Display":"/home/gg/Tests/yadabout.sh" --button="Cancel":0  \
    --column "ID" --column "File" \
    --column "Exec" "${list[@]}") 

Разница: когда вы назначаете код / ​​идентификатор выхода для каждой кнопки, после нажатия кнопки yad возвращает ее значение переменной (файлы в вашем коде), и диалоговое окно yad закрывается.

Если вместо идентификатора кнопки вы назначаете команду для запуска (случай 2 выше), то диалоговое окно yad остается на экране и не закрывается. Но в этом режиме нет возвращаемого значения YAD, и, таким образом, вы не можете проанализировать выбор из диалога YAD для этой внешней команды / сценария (не уверен на 100%, но я пока не нашел способа сделать это).

Чтобы уточнить предыдущий ответ:

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
Другие вопросы по тегам