![Bash 脚本不继承其父级的环境](https://linux22.com/image/128853/Bash%20%E8%84%9A%E6%9C%AC%E4%B8%8D%E7%BB%A7%E6%89%BF%E5%85%B6%E7%88%B6%E7%BA%A7%E7%9A%84%E7%8E%AF%E5%A2%83.png)
这个问题的另一个标题是:
“在子 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 函数以在子bash
shell中使用
export -f functionname
在父外壳中。