gpt4 book ai didi

bash - YAD 按钮可以调用脚本中的函数吗?

转载 作者:行者123 更新时间:2023-12-02 20:26:30 25 4
gpt4 key购买 nike

我正在 BASH 中使用 YAD 对话框,但在按钮构造方面遇到了问题。我无法使用 YAD 按钮来调用同一脚本中的函数。有办法做到这一点吗?

我的理解是,如果我使用以下结构,按下按钮将调用冒号后面的命令。如果用户单击打开浏览器 按钮:

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

在上面的代码中,按钮日期按预期工作,调用日期命令。按钮 TwoExit 可以工作,因为我正在检查命令的退出值并根据其值进行分支。可悲的是(对我来说),按钮One没有任何作用。我希望单击按钮 One 会调用本地函数 click_one。我想知道是否有办法格式化 YAD 命令以便调用 click_one 函数。

虽然上面的代码建议使用退出值的解决方法,但我真正的目标是将成功的答案应用于表单按钮,据我所知,到目前为止,该按钮不会返回退出值。换句话说,以下代码也会默默地失败,但我希望它调用函数click_one:

yad --form --field="One":fbtn click_one

最佳答案

一种可能的方法:

#!/bin/bash


click_one(){
yad --center --text="Clicked the one"
}

click_two(){
yad --center --text="Clicked the two"
}

export -f click_one click_two

yad \
--title "My Title" \
--center --text="Click a button to see what happens" \
--button="One":"bash -c click_one" \
--button="Two":"bash -c click_two" \
--button="Date":"date" \
--button="Exit":0


echo $?

关于bash - YAD 按钮可以调用脚本中的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49738161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com