source
現在、シェルに影響を与えるためにコマンドを介して実行するいくつかの環境変数を設定するシェルスクリプトがあります。私はこのシェルスクリプトを参照する別のシェルスクリプトを作成しましたが、他のシェルスクリプト内でそれを呼び出すことは現在のシェルから直接呼び出すのと同じ効果があると思いましたが、明らかにそうではありませsource
ん。実行中のシェルに適用されるすべてのエントリが現在のシェルに反映されるべきであることをこの呼び出し側スクリプトに指示する方法はありますか?
環境変数を持つスクリプトは次のように始まりますset -a
ので、次のことをしたいと思います。
$(cat env_script.sh)
すべてを呼び出しシェルにエクスポートしますが、それも機能しないようです。
答え1
あなたのアプローチは2つの理由で機能しません。
まず、env_script.shに次の変数を設定するステートメントが含まれているとします。
X=5
この文が実行されると
$(cat env_script.sh)
bashにコマンドで実行するように求めるのは、興味深い名前のプログラムを実行するこのスクリプトを実行することですX=5
。
したがって、定義をシェルにインポートする正しい方法は次のとおりです。
. env_script.sh
2番目の問題は、あなたの記事に基づいて変数が「呼び出し側スクリプト」に伝播されることを望むことです。 「呼び出し側スクリプト」が正確に何を意味するかは完全には明確ではありませんが、この呼び出し側スクリプトがその逆ではない場合購入作成しようとしていますが、子プロセスとして呼び出すスクリプトは技術的に呼び出し元に直接変数を渡すことはできません。
簡単に言えば、シェルが変数を設定し、設定が別々のファイルで定義されている場合は、次のものが必要です。源泉インポートするコマンドです。
答え2
これは例です
#!/bin/bash
CURR_DIR=$(dirname $(readlink -f $0))
. ${CURR_DIR}/set-env-script.sh
# Add here your code...