从另一个脚本执行脚本不起作用

从另一个脚本执行脚本不起作用

我正在使用 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)

上述方法不起作用的原因可能是什么。考虑REPOenv 已经设置。

答案1

问题是当你设置REPO 外壳变量,你不export 这样做是为了让它成为环境变量

不幸的是,您还没有提供详细信息如何build_1.sh如果从内部调用,则构建不起作用build.sh,但是如果您的从属脚本依赖于该REPO变量,那么它将遇到问题,因为除非您导出它,否则从属脚本将看不到它。

补救办法是大概 (正如我所说,问题仍然缺乏一些细节)实际导出变量。为此,只需说明

export REPO=/home/${USER}/project

在你的脚本中。

感谢@ilkkachu 指出了我对这个答案的先前版本的推理中的一个根本错误。

相关内容