是否可以在Bourne shell(sh)中导出函数?
this question中的答案表明bash
,ksh
和zsh
如何执行此操作,但没有人说sh
是否支持它。
如果sh
肯定不允许,我将不再花时间搜索它。
答案 0 :(得分:12)
不,这是不可能的。
The POSIX spec for export很明显它只支持变量。 typeset
以及在最近的shell中用于此目的的其他扩展只是 - 扩展 - 在POSIX中不存在。
答案 1 :(得分:0)
不。 export
的POSIX规范缺少bash中的-f
,该bash允许导出功能。
(非常冗长的)解决方法是将函数保存到文件中并在子脚本中提供源代码。
script.sh:
#!/bin/sh --
function_holder="$(cat <<'EOF'
function_to_export() {
printf '%s\n' "This function is being run in ${0}"
}
EOF
)"
function_file="$(mktemp)" || exit 1
export function_file
printf '%s\n' "$function_holder" > "$function_file"
. "$function_file"
function_to_export
./script2.sh
rm -- "$function_file"
script2.sh:
#!/bin/sh --
. "${function_file:?}"
function_to_export
从终端运行script.sh:
[user@hostname /tmp]$ ./script.sh
This function is being run in ./script.sh
This function is being run in ./script2.sh