繁体   English   中英

如何在 Bourne shell 中导出函数?

[英]How to export a function in Bourne shell?

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

这个问题的答案表明如何为bashkshzsh这样做,但没有人说sh是否支持它。

如果sh肯定不允许,我就不会再花时间去找了。

不,这是不可能的。

用于导出的POSIX规范非常明确,它只支持变量。 在更新的shell中用于此目的的typeset和其他扩展只是 - 扩展 - 在POSIX中不存在。

不是。用于export的POSIX规范缺少bash中的-f ,允许导出函数。

(非常详细)的解决方法是将您的函数保存到文件并在子脚本中将其源代码。

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

eval 这很糟糕,但在某些情况下你可以使用eval 当然你应该明白你在做什么

#myfunc.sh
myfunc()
{
  #do somthing
}
#script.sh
eval "$(cat myfunc.sh)"
myfunc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM