複数のシェルスクリプトが「ソース」変数を​​変更すると、互いに干渉しますか?

複数のシェルスクリプトが「ソース」変数を​​変更すると、互いに干渉しますか?

並列に実行される複数の異なるスクリプトから同じシェルスクリプトを取得し、ソーススクリプトで定義されているシェル変数を変更すると、購入スクリプトは互いの変数値を混同しますか?

例:

  • 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.shsome_valuefile-1.shfile-2.shsome_value


ちなみに、次のような算術式を作成しようとしています。

some_value=$1+10

想像していた効果は得られないでしょう。文字通り譲歩 file-1.shするからです。文字通り譲歩するからです。算術評価を実行するには、次のように算術拡張に入れる必要があります。5+10file-2.sh10+10

some_value=$(($1+10))

シェルスクリプトを確認することをお勧めしますshellcheck、構文(およびいくつかの論理)エラーをキャッチするために、多くのLinuxディストリビューションでスタンドアロンツールとしても使用できます。

関連情報