Windows 中的 bash 与 Linux 中的 bash 的行为不同

Windows 中的 bash 与 Linux 中的 bash 的行为不同

我在 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)

相关内容