1. ホーム
  2. bash

[解決済み] シェルスクリプトは、呼び出し元のシェルの環境変数を設定できますか?重複

2022-03-20 17:14:52

質問

シェルスクリプトを書き、それを実行すると、呼び出し側のシェルで設定されたままの環境変数が設定されるようにしようとしています。

setenv FOO foo

はcsh/tcshで、または

export FOO=foo

を sh/bash で使用する場合は、スクリプトの実行時にのみ設定します。

すでに知っているのは

source myscript

は新しいシェルを起動するのではなく、スクリプトのコマンドを実行するので、結果として "呼び出し元の" 環境が設定されることがあります。

しかし、ここで困ったことになる。

このスクリプトは、bashまたはcshのどちらからでも呼び出せるようにしたいのです。 言い換えれば、どちらのシェルのユーザーでも、このスクリプトを実行して、そのシェルの環境を変更できるようにしたいのです。 csh を実行しているユーザが bash スクリプトをソースすることはできないし、bash を実行しているユーザが csh スクリプトをソースすることはできないからだ。

スクリプトに2つのバージョンを書いて管理する必要がない、合理的な解決策はないでしょうか?

解決方法は?

シェルプロセスは親プロセスの環境のコピーを持っており、親プロセスの環境には一切アクセスできません。シェルプロセスが終了すると、その環境に加えたすべての変更が失われます。スクリプトファイルのソースは、シェル環境を設定するための最も一般的な方法ですが、あなたはただ弾丸を噛んで、シェルの2つのフレーバーのそれぞれを維持したいかもしれません。