並列に実行される複数の異なるスクリプトから同じシェルスクリプトを取得し、ソーススクリプトで定義されているシェル変数を変更すると、購入スクリプトは互いの変数値を混同しますか?
例:
source.sh
#!/bin/bash some_value=$1+10
file-1.sh
#!/bin/bash source ./source.sh 5 ./some-script $some_value
file-2.sh
#!/bin/bash source ./source.sh 10 ./some-script.sh $some_value
答え1
$some_value
これを定義するプロセスと同じくらい多くの環境変数またはシェル変数があります。
その後、同時に実行するとfile-1.sh
プロセスfile-2.sh
が異なるため、値が異なります。これはsource
プロセスを生成せず、ソーススクリプトをプロセス環境でfile-1.sh
使用できますfile-2.sh
。
答え2
シェルスクリプトを使用することは、source
現在のシェルインスタンスがスクリプトを1行ずつ読み込み、コマンドラインに入力したように(source
プロンプトで実行した場合)、その場でコマンドを実行することを意味します。コピーしてスクリプトに貼り付けた場合(スクリプトからインポートする場合)
したがって、異なるシェルスクリプトには、偶然両方の場合に同じ名前を持つローカルに定義されたシェル変数があるようですfile-1.sh
。両方のスクリプトを並列に実行しても、お互いに何も知らないので、相互作用はありません。実行中のサブシェルは、実行中のサブシェルにも変数が定義されていることを全く知りません。file-2.sh
some_value
file-1.sh
file-2.sh
some_value
ちなみに、次のような算術式を作成しようとしています。
some_value=$1+10
想像していた効果は得られないでしょう。文字通り譲歩 file-1.sh
するからです。文字通り譲歩するからです。算術評価を実行するには、次のように算術拡張に入れる必要があります。5+10
file-2.sh
10+10
some_value=$(($1+10))
シェルスクリプトを確認することをお勧めしますshellcheck
、構文(およびいくつかの論理)エラーをキャッチするために、多くのLinuxディストリビューションでスタンドアロンツールとしても使用できます。