いくつかの自動化の目的でcshスクリプトを使用してください。私は多くのスクリプトを持っており、すべてのスクリプトの先頭に固定された環境変数のセットを設定する必要があります。
|----SCRIPT 1---| |----SCRIPT 2---|
|# set env vars | |# set env vars |
| | | |
|# do something | |# do something |
| | |# else |
だから、すべての環境変数を別のスクリプトに入れて、各ファイルからインポートしたいと思います。ところで、ソーススクリプトの内部で設定した環境変数が外部には反映されないことがわかりました。私が望むことを達成するためのきれいな方法はありますか?それとも、すべてのスクリプトで明示的に環境変数を設定する必要がありますか?
修正する:
ファイルのインポート中に、「tee」コマンドを使用して出力をファイルにパイプします。パイプを削除した後、スクリプトファイルが機能していることを確認しました。
答え1
はい、パイプライン出力はサブシェルsource
でパイプラインの対応する部分を実行します。つまり、他のファイルのソースに設定された環境変数はスクリプト環境に影響を与えません。
例:
environment.csh
:
setenv string "hello world"
echo 'The environment is now set up'
script.csh
:
#!/bin/csh
source environment.csh | tee output
printf 'string is "%s"\n' "$string"
実行結果はscript.csh
次のとおりです。
The environment is now set up
string: Undefined variable.
tee
出力されるようにパイプを取り外します。
The environment is now set up
string is "hello world"