Windows의 bash는 Linux의 bash와 다르게 동작합니다.

Windows의 bash는 Linux의 bash와 다르게 동작합니다.

Windows 10에서 다음 버전의 bash를 사용하고 있습니다.

GNU bash, 버전 4.4.23(1)-릴리스(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.jsLinux에서는 다음과 같습니다.

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 쉘을 스크립트 해석기로 실행하는 하위 프로세스에서 실행됩니다. 두 스크립트를 하위 프로세스로 실행하는 하위 쉘을 생성합니다.

첫 번째 첨자는 쉘 변수를 설정합니다. 그것도 아니야시도쉘 변수에서 환경 변수로 내보냅니다. 하지만 그렇다고 해도가지다, 그건 작동하지 않습니다. 하위 프로세스는 자신의 환경과 하위 프로세스의 환경에만 영향을 미칠 수 있습니다. 부모(자식) 쉘이나 할아버지에는 영향을 미칠 수 없습니다. 두 번째 첨자에는 변수가 없으며 빈 문자열로 출력을 생성합니다.

첫 번째 스크립트는 소스로 제공되어야 하며 하위 프로세스로 실행되어서는 안 됩니다.

(../settings.sh;./constants.js)

관련 정보