Я играю с диалоговыми окнами YAD в BASH, и у меня проблемы с построением кнопки. Я не могу получить кнопку YAD для вызова функции в том же скрипте. Есть ли способ сделать это?
Насколько я понимаю, если я использую следующую конструкцию, нажатие кнопки вызовет команду, следующую за двоеточием. Этот пример (который работает) откроет экземпляр Firefox, если пользователь нажмет кнопку Открыть браузер:
yad --button="Open browser":firefox
У меня есть сценарий с несколькими функциями BASH. Я бы хотел, чтобы нажатие кнопки вызвало одну из функций. Это не так. Ниже приводится простой сценарий, который при запуске демонстрирует неутешительное поведение:
#!/bin/bash,
click_one()
{
yad --center --text="Clicked the one"
}
click_two()
{
yad --center --text="Clicked the two"
}
cmd="yad --center --text=\"Click a button to see what happens\" \
--button=\"One\":click_one \
--button=\"Two\":2 \
--button=\"Date\":date \
--button=\"Exit\":99"
proceed=true
while $proceed; do
eval "$cmd"
exval=$?
case $exval in
2) click_two;;
99) proceed=false;;
esac
done
В приведенном выше коде кнопка Date работает должным образом, вызывая команду date. Кнопки Два и Выход работают, потому что я проверяю значение выхода команды и выполняю переход по его значению. К сожалению (для меня) кнопка Один ничего не делает. Я надеялся, что нажатие на кнопку One вызовет локальную функцию click_one. Я хотел бы знать, есть ли способ отформатировать команду YAD так, чтобы вызывалась функция click_one.
Хотя в приведенном выше коде предлагается обходной путь с использованием значения выхода, моя настоящая цель - применить успешный ответ к кнопке формы, которая, насколько я могу понять, не возвращает значение выхода. Другими словами, следующее также не работает без уведомления, но я бы хотел, чтобы он вызывал функцию click_one:
yad --form --field="One":fbtn click_one