如何导出bash脚本的每个函数以与gtkdialog一起使用?

时间:2015-01-08 00:56:27

标签: bash shell user-interface export

我有一个形式的bash脚本:

cat  << EOF > stackoverflow_source.sh
#!/bin/bash
function f1 () {
         echo This is the first function.
}
function f2 () {
         echo This is the second function.
}
EOF

及其带有gtkdialog的GUI:

$ cat  << EOF > stackoverflow_gui.sh
#! /bin/bash
source stackoverflow_source.sh
export MAIN_DIALOG='
<window window_position="1" title="StackOverflow Question">
 <hbox>
  <button>
   <label>Function One</label>
   <action>f1</action>
  </button>
  <button>
   <label>Function Two</label>
   <action>f2</action>
  </button>
 </hbox>         
</window>'
gtkdialog  --program=MAIN_DIALOG
EOF

跑完后:

$ source stackoverflow_source.sh

我明白了:

$ f1
This is the first function.

但是当我点击gui中的相应按钮(即使在获取脚本之后),我得到了

sh: f1: command not found

使用

导出功能时
$ export -f f1 && export -f f2

他们确实在gui中工作(sh stackoverflow_gui并单击他们的按钮,回显文本)。

有没有办法在我的stackoverflow_source.sh脚本中导出每个函数? (在我的真实源脚本中,我有数百个函数,我不想一个接一个地执行)。 或者,是否有更好的方式来做我想要的事情?

1 个答案:

答案 0 :(得分:2)

这应该适合你:

for func in $(declare -F | cut -f3 -d' ')
do
    export -f $func
done

或者,更简洁(但不太可读):

export -f $(declare -F | cut -f3 -d' ')