我有一个形式的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
脚本中导出每个函数? (在我的真实源脚本中,我有数百个函数,我不想一个接一个地执行)。
或者,是否有更好的方式来做我想要的事情?
答案 0 :(得分:2)
这应该适合你:
for func in $(declare -F | cut -f3 -d' ')
do
export -f $func
done
或者,更简洁(但不太可读):
export -f $(declare -F | cut -f3 -d' ')