首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >YAD按钮可以在脚本中调用函数吗?

YAD按钮可以在脚本中调用函数吗?
EN

Stack Overflow用户
提问于 2018-04-09 17:09:12
回答 2查看 2.7K关注 0票数 2

我正在玩在巴什的YAD对话框和有问题的按钮建设。我无法得到一个YAD按钮来调用同一个脚本中的函数。有办法这样做吗?

我的理解是,如果我使用以下构造,按下按钮将调用冒号后面的命令--如果用户单击open Browser按钮,这个示例将打开Firefox的一个实例:

代码语言:javascript
复制
yad --button="Open browser":firefox

我有一个带有几个BASH函数的脚本。我想按下按钮来调用其中一个功能。以下是一个简单的脚本,运行时演示了令人失望的行为:

代码语言:javascript
复制
#!/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

在上面的代码中,按钮日期按预期工作,调用日期命令。按钮2和Exit工作,因为我正在检查命令的退出值,并在其值上分支。不幸的是(对我来说),纽扣一号什么也不做。我曾希望点击按钮一会调用本地函数click_one。我想知道是否有一种方法来格式化YAD命令,以便调用click_one函数。

虽然上面的代码给出了使用exit值的解决方案,但我真正的目标是对窗体按钮应用一个成功的答案,据我所知,该按钮目前还没有返回一个退出值。换句话说,以下内容也会悄无声息地失败,但我希望它能够调用函数click_one

代码语言:javascript
复制
yad --form --field="One":fbtn click_one
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-09 18:01:00

显然不是,它需要一个实际的命令。

您可以:将您的函数放在一个单独的文件中,作为命令,启动bash,源文件,并调用该函数。

在这里,我还将对代码进行重构,以便将yad命令存储在数组中。这将使您的脚本更加健壮:

代码语言:javascript
复制
# using an array makes the quoting a whole lot easier
cmd=(
    yad --center --text="Click a button to see what happens" 
      --button="One":"bash -c 'source /path/to/functions.sh; click_one'"
      --button="Two":2 
      --button="Date":date 
      --button="Exit":99
)

while true; do
    "${cmd[@]}"      # this is how to invoke the command from the array
    exval=$?
    case $exval in
        2) click_two;;
        99) break;;
    esac
done
票数 1
EN

Stack Overflow用户

发布于 2018-04-09 18:05:23

一种可能的方式:

代码语言:javascript
复制
#!/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 $?
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49738161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档