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 シェルをスクリプトソルバーとして実行する子プロセスで実行されます。両方のスクリプトをサブプロセスとして実行するサブシェルを作成します。

最初の添え字はシェル変数を設定します。それでもない試みるシェル変数から環境変数にエクスポートします。しかし、それでも持つ、それは動作しません。子プロセスは、自分の環境と子プロセスの環境にのみ影響を与える可能性があります。親(子)シェルや祖父には影響を与えません。 2 番目の添え字には変数がなく、空の文字列で出力を生成します。

最初のスクリプトはソースとして提供する必要があり、子プロセスとして実行しないでください。

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

関連情報