运行 在同一个 shell 中生成命令以访问定义的函数

Run generated commands in same shell in order to access defined function

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

function myfunc() {
...}
}

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

bash $cmds

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

有办法解决这个问题吗?通过以某种方式使函数成为全局函数,或者通过在当前 shell?

中创建这些命令 运行

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

在这种情况下你可以使用eval

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

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

或者您可以使用 export -f 导出函数 - 虽然这是 bash 特定的(还记得 shellshock 吗?)。