You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在sh中实现类似bash的export -f函数导出功能?

兼容sh的函数共享方案

仅在当前shell使用函数

直接删掉export -f my_function即可。sh环境下用.命令source脚本后,函数会直接加载到当前shell环境里,无需额外导出就能调用。

修改后的my_functions.sh:

#!/bin/sh

my_function() {
    echo 'whatever'
}

使用方式不变:

. ./my_functions.sh
my_function  # 正常输出whatever

需要在子shell中调用函数

sh标准中没有导出函数的机制,可通过环境变量传递函数定义,在子shell里重新加载函数:

  1. 调整my_functions.sh,把函数定义存入环境变量:
#!/bin/sh

my_function() {
    echo 'whatever'
}

# 优先用typeset -f自动获取函数定义,不支持的话手动指定
if command -v typeset >/dev/null 2>&1; then
    export MY_FUNCTION_DEF="$(typeset -f my_function)"
else
    export MY_FUNCTION_DEF='my_function() { echo "whatever"; }'
fi
  1. 在子shell里先通过eval重建函数再调用:
. ./my_functions.sh
# 子shell中执行
(eval "$MY_FUNCTION_DEF"; my_function)

另一种思路:把函数改成独立脚本

如果函数不需要修改当前shell的环境变量,直接把函数内容做成单独的可执行脚本更简单:

创建my_function文件:

#!/bin/sh
echo 'whatever'

给脚本加执行权限:

chmod +x my_function

之后不管是当前shell还是子shell,直接运行./my_function就能用,无需source。

内容的提问来源于stack exchange,提问作者rxFt20

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:40:33