0

在我的 Bash 脚本中,我正在生成一个包含一系列命令的字符串。其中一些命令是对该脚本中定义的函数的引用。那是:

function myfunc() {
...}
}

cmds=`echo "echo hello"; echo myfunc` # contrived, but you get the idea

bash $cmds

现在,通过调用新的 Bash 脚本来运行命令不起作用 - 该函数myfunc未定义。

有没有解决的办法?通过以某种方式使函数成为全局函数,或者通过使这些命令在当前 shell 中运行?

4

2 回答 2

1

有两种方式:要么使用export -f导出函数,要么使用eval在当前shell中执行命令。

于 2015-04-21T14:54:05.833 回答
1

您可以eval在这种情况下使用:

doit() { echo "ok"; }
foo="echo a; echo b; doit;"
eval "$foo"

或输出到临时脚本并获取该脚本。

或者你可以export -f用来导出函数——尽管这是特定于 bash 的(还记得 shellshock 吗?)。

于 2015-04-21T14:54:14.300 回答