如何导出 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' ')
我有一个 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' ')