Bash 脚本不继承其父级的环境

Bash 脚本不继承其父级的环境

这个问题的另一个标题是:

“在子 shell 中找不到父 shell 中识别的命令”

我在父 shell 中有这个

source ~/.quicklock/ql.sh

这个命令在我当前的 shell 中被识别:

ql_acquire_lock

然后我运行一个脚本,如下所示:

./script/tsc.sh

在该脚本中我们有:

#!/usr/bin/env bash
set -e;
ql_acquire_lock

我一定对 shell 的工作原理感到非常困惑,因为我认为子 shell/进程会继承父级的 env,除非显式调用 unset 等?

这是我得到的错误:

./scripts/tsc.sh: line 3: ql_acquire_lock: command not found

答案1

子 shell 将继承父 shell 的环境。

该环境将包含父 shell 导出的内容。

如果您的 shell 函数未导出,它将不会存在于子进程的环境中。

bash可以使用以下命令导出 shell 函数以在子bashshell中使用

export -f functionname

在父外壳中。

相关内容