我正在使用 shell 脚本来编译不同的组件。我有一个主脚本正在调用另一个 shell 脚本。这是一个例子,
Repo/build.sh
Repo/code/mode/1/build/build_1.sh
现在,如果我转到Repo/code/mode/1/build/
文件夹并运行脚本,build_1.sh
那么它就可以工作了。
build_1.sh
但是,如果从中调用脚本,则build.sh
构建不起作用。
#!/bin/bash
#!/usr/bin/env bash
REPO=/home/${USER}/project
set -o errexit
set -o nounset
set -o pipefail
(cd ${REPO}/code/mode/1/build/; ./build_1.sh)
上述方法不起作用的原因可能是什么。考虑REPO
env 已经设置。
答案1
问题是当你设置REPO
外壳变量,你不export
这样做是为了让它成为环境变量。
不幸的是,您还没有提供详细信息如何build_1.sh
如果从内部调用,则构建不起作用build.sh
,但是如果您的从属脚本依赖于该REPO
变量,那么它将遇到问题,因为除非您导出它,否则从属脚本将看不到它。
补救办法是大概 (正如我所说,问题仍然缺乏一些细节)实际导出变量。为此,只需说明
export REPO=/home/${USER}/project
在你的脚本中。
感谢@ilkkachu 指出了我对这个答案的先前版本的推理中的一个根本错误。