如何在Bourne shell中导出函数?

时间:2015-03-24 18:04:23

标签: bash function shell unix sh

是否可以在Bourne shell(sh)中导出函数?

this question中的答案表明bashkshzsh如何执行此操作,但没有人说sh是否支持它。

如果sh肯定不允许,我将不再花时间搜索它。

2 个答案:

答案 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