如何导出eval定义的函数?

Ksh*_*rma 4 bash shell-script

通过在命令行中运行来定义动态函数:

eval "ab() { echo test; }"
Run Code Online (Sandbox Code Playgroud)

它运行并打印测试。

将相同的语句放入脚本中test.sh,然后执行该脚本。没发生什么事。该函数未定义。

我认为这是因为函数是在脚本内定义的,而不是在脚本外定义的。所以我尝试在脚本中添加:

export -f ab
Run Code Online (Sandbox Code Playgroud)

但它不起作用。如何将函数从脚本导出到 shell?

cas*_*cas 5

您不能将函数或变量导出到父 shell,只能导出到运行脚本的 shell 或子 shell。

对于更改当前 shell 环境的脚本,您需要使用source或运行脚本.。例如./myscript.sh,你不会跑,而是跑. ./myscript.sh

这会告诉您当前的 shell 自己运行脚本,而不是生成一个子 shell 来运行它……从而允许脚本修改当前环境。