我试图让我的 bash 函数调用另一个使用bash -c
.我们如何使脚本中先前创建的函数在不同的 bash 会话之间持续存在?
当前脚本:
#!/bin/bash
inner_function () {
echo "$1"
}
outer_function () {
bash -c "echo one; inner_function 'two'"
}
outer_function
电流输出:
$ /tmp/test.sh
one
bash: inner_function: command not found
期望的输出:
one
two
答案1
导出它:
typeset -xf inner_function
例子:
#! /bin/bash
inner_function () { echo "$1"; }
outer_function () { bash -c "echo one; inner_function 'two'"; }
typeset -xf inner_function
outer_function
编写完全相同的内容的其他方法是export -f inner_function
or declare -fx inner_function
。
请注意,导出的 shell 函数是A)仅限 bash 的功能,其他 shell 不支持并且b)仍然存在争议,即使大多数错误都已修复炮弹休克症。
答案2
当我在多个脚本中需要相同的函数时,我将其放在一个侧“库”脚本文件中,并将其“源”(source the_lib_script
或. the_lib_script
)放在需要该函数的脚本中。