1. ホーム
  2. バッシュ

[解決済み】あるシェルスクリプトから別のシェルスクリプトにすべての変数を渡す?

2022-04-19 05:10:21

質問

という名前のシェル/bashスクリプトを持っているとします。 test.sh を使っています。

#!/bin/bash

TESTVARIABLE=hellohelloheloo
./test2.sh

私の test2.sh はこのようになります。

#!/bin/bash

echo ${TESTVARIABLE}

これではうまくいきません。すべての変数をパラメータとして渡すのはやりすぎだと思うからです。

他に方法はありますか?

解決方法は?

基本的には2つの選択肢があります。

  1. 変数を環境変数にする ( export TESTVARIABLE ) を実行してから、2番目のスクリプトを実行します。
  2. 2番目のスクリプトのソース、すなわち . test2.sh で、同じシェルで実行されます。これにより、配列のような複雑な変数を簡単に共有することができますが、もう一方のスクリプトがソースシェル内の変数を変更できることを意味します。

UPDATEです。

使用方法 export を使用して環境変数を設定するには、既存の変数を使用するか、または

A=10
# ...
export A

これは bashsh . bash も、このように組み合わせることができます。

export A=10

また、これは 私の sh (これは、たまたま bash を使用することができます。 echo $SHELL を確認する)。 しかし、それがすべての sh だから、安全策をとって、別々にするのが一番です。

この方法でエクスポートした変数は、実行するスクリプトなどでも見ることができます。

a.sh:

#!/bin/sh

MESSAGE="hello"
export MESSAGE
./b.sh

b.sh:

#!/bin/sh

echo "The message is: $MESSAGE"

次に

$ ./a.sh
The message is: hello

これらは両方ともシェルスクリプトであることも、単なる付随的なものである。 環境変数は、実行するどのプロセスにも渡すことができます。例えば、代わりに python を使用した場合は、次のようになります。

a.sh:

#!/bin/sh

MESSAGE="hello"
export MESSAGE
./b.py

b.py:

#!/usr/bin/python

import os

print 'The message is:', os.environ['MESSAGE']

ソーシングを行う。

その代わりに、次のようなソースを作ることができます。

a.sh:

#!/bin/sh

MESSAGE="hello"

. ./b.sh

b.sh:

#!/bin/sh

echo "The message is: $MESSAGE"

次に

$ ./a.sh
The message is: hello

の内容を多かれ少なかれインポートしています。 b.sh を直接実行し、それを 同じシェル . 変数にアクセスするために、変数をエクスポートする必要がなかったことに注意してください。これにより、あなたが持っているすべての変数を暗黙のうちに共有し、もう一方のスクリプトがシェル内の変数を追加/削除/変更することができるようになります。 もちろん、このモデルでは両方のスクリプトが同じ言語である必要があります ( sh または bash ). メッセージの受け渡しの例を挙げましょう。

a.sh:

#!/bin/sh

MESSAGE="hello"

. ./b.sh

echo "[A] The message is: $MESSAGE"

b.sh:

#!/bin/sh

echo "[B] The message is: $MESSAGE"

MESSAGE="goodbye"

次に

$ ./a.sh
[B] The message is: hello
[A] The message is: goodbye

の中でも同様に機能します。 bash . また、配列や連想配列のように、環境変数として表現できないような複雑なデータも簡単に共有することができます(少なくとも、あなたが何か重いことをしなければ)。