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

How to export every function of a bash script for use with gtkdialog?

我有一个 bash 形式的脚本:

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

及其 GUI gtkdialog:

$ cat  << EOF > Whosebug_gui.sh
#! /bin/bash
source Whosebug_source.sh
export MAIN_DIALOG='
<window window_position="1" title="Whosebug 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 Whosebug_source.sh

我得到:

$ f1
This is the first function.

但是当我在 gui 中单击相应的按钮时(即使在采购脚本之后)我得到

sh: f1: command not found

当我用

导出函数时
$ export -f f1 && export -f f2

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

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

这应该适合你:

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

或者,更简洁(但可读性较差):

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