[解決済み】あるシェルスクリプトから別のシェルスクリプトにすべての変数を渡す?
質問
という名前のシェル/bashスクリプトを持っているとします。
test.sh
を使っています。
#!/bin/bash
TESTVARIABLE=hellohelloheloo
./test2.sh
私の
test2.sh
はこのようになります。
#!/bin/bash
echo ${TESTVARIABLE}
これではうまくいきません。すべての変数をパラメータとして渡すのはやりすぎだと思うからです。
他に方法はありますか?
解決方法は?
基本的には2つの選択肢があります。
-
変数を環境変数にする (
export TESTVARIABLE
) を実行してから、2番目のスクリプトを実行します。 -
2番目のスクリプトのソース、すなわち
. test2.sh
で、同じシェルで実行されます。これにより、配列のような複雑な変数を簡単に共有することができますが、もう一方のスクリプトがソースシェル内の変数を変更できることを意味します。
UPDATEです。
使用方法
export
を使用して環境変数を設定するには、既存の変数を使用するか、または
A=10
# ...
export A
これは
bash
と
sh
.
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
. また、配列や連想配列のように、環境変数として表現できないような複雑なデータも簡単に共有することができます(少なくとも、あなたが何か重いことをしなければ)。
関連
-
[解決済み] テスト
-
[解決済み] IPアドレスのまとめ方
-
[解決済み] 環境変数を表示/エコーするには?
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトの入力引数の存在確認
-
[解決済み] シェルスクリプトで部分文字列を別の文字列に置き換える
-
[解決済み] キーと値のペアのファイルから環境変数を設定する
-
[解決済み】bashで1つのコマンドでシェル変数にデフォルト値を割り当てる。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】bashでjsonファイルを解析するために、jqの出力にあるダブルクオートを削除する方法は?
-
[解決済み】if [](角括弧)の「[: 引数が多すぎる」エラーの意味)
-
[解決済み] シェルスクリプトでブール変数を宣言して使用するにはどうすればよいですか?
-
[解決済み] bashの文字列の等値性テストで、予期しない演算子エラーが発生するのはなぜですか?重複
-
[解決済み] 値がベースに対して大きすぎる(エラートークンは "08")[重複]
-
[解決済み] bash スクリプトの "${BASH_SOURCE[0]}" と $( cd $( dirname "xxx" && pwd )) の意味について
-
[解決済み] bashでのDiffコマンド
-
[解決済み] Bash - "fi ;;" の使い方は?
-
[解決済み] シェルスクリプトでの連想配列
-
[解決済み] 環境変数を表示/エコーするには?