我在 Windows 10 上使用以下版本的 bash:
GNU bash,版本 4.4.23(1)-release (x86_64-pc-msys)
我收到了一个在 Linux 上运行该脚本的人发来的脚本。在 Windows 上运行时,我得到了不同的结果。
脚本是test.sh
:
#!/bin/bash
set -x
( . settings.sh ; . constants.js ) > output.js
settings.sh
:
TEST_URL="https://myurl.com"
constants.js
:
cat << EOF
export class Output {
}
Constants.Url = "$TEST_URL";
EOF
output.js
在 Linux 上看起来如下:
export class Output {
}
Constants.Url = "https://myurl.com";
该脚本无法在 Windows 上运行。我将其修改为:
#!/bin/bash
set -x
( ./settings.sh ; ./constants.js ) > output.js
在 Windows 上:
export class Output {
}
Constants.Url = "";
知道如何编写脚本才能在 Windows 上获得与 Linux 上相同的结果吗?
答案1
(./settings.sh;./constants.js)
它在运行 Bourne Again shell 作为脚本解释器的子进程中运行。它生成一个子 shell,该子 shell 依次作为子进程运行两个脚本。
第一个子脚本设置 shell 变量。它甚至不试图将其从 shell 变量导出到环境变量。但即使它有,那是行不通的。子进程只能影响它自己的环境及其子进程的环境。它不能影响其父(子)shell 或其祖父。第二个子脚本没有变量,并产生带有空字符串的输出。
第一个脚本需要获取来源,而不是作为子进程运行。
(../settings.sh;./constants.js)