実行時に、呼び出し元のシェルに設定されたままになるいくつかの環境変数を設定するシェル スクリプトを作成しようとしています。
setenv FOO foo
csh/tcshの場合、または
export FOO=foo
sh/bash では、スクリプトの実行中にのみ設定します。
それはもうわかっている
source myscript
新しいシェルを起動するのではなく、スクリプトのコマンドを実行し、その結果、「呼び出し元」の環境が設定されることがあります。
しかし、ここに問題があります:
このスクリプトを bash または csh から呼び出せるようにしたいのです。言い換えると、どちらのシェルのユーザーもスクリプトを実行して、シェルの環境を変更できるようにしたいのです。したがって、csh を実行しているユーザーは bash スクリプトをソース化できず、bash を実行しているユーザーは csh スクリプトをソース化できないため、'source' は機能しません。
スクリプトの 2 つのバージョンを記述して維持する必要がない合理的な解決策はありますか?
ベストアンサー1
「ドット スペース スクリプト」呼び出し構文を使用します。たとえば、スクリプトへのフル パスを使用してこれを行う方法は次のとおりです。
. /path/to/set_env_vars.sh
スクリプトと同じディレクトリにいる場合は、次のように実行します。
. set_env_vars.sh
これらは、別のシェルをロードするのではなく ( を実行した場合、別のシェルをロードすることになります)、現在のシェルでスクリプトを実行します./set_env_vars.sh
。同じシェルで実行されるため、終了時に設定した環境変数が使用可能になります。
これは を呼び出すのと同じことですが、入力が短く、 が機能しないsource set_env_vars.sh
場所でも機能する可能性があります。source