bash:動的環境制御

bash:動的環境制御

環境変数を変更するアプリケーションがあります。目的は、変更されたコンテキスト環境でbashシェルを起動することです。

私のアプリケーションが環境を変更し、変更された環境で "bash --noprofile --norc"を実行すると、エイリアスが削除されることを除いて、目的の動作をほとんど得ることができます。ログインしてOSで直接シェルを開くと、「一般」エイリアスが取得されますが、アプリケーションがbashを起動するとinitファイルをスキップするため、エイリアスは取得されません。

bashを動的ソースから初期化する方法はありますか?つまり、私のアプリケーションがすべてのさまざまなユーザー/施設設定(エイリアスを含む)と一緒に「bash」を実行し、最後に自分のアプリケーションに適用する必要がある違いを得ることができれば便利です。理想的には、これは私のユーザーのために準備されたシェルを開くことです。私はマニュアルページでこれを見つけることができませんでした(またはおそらく理解したかもしれません)。

理想的な世界では、ユーザー/ファクトリ設定をリファクタリングして、より再入可能にすることができます(アプリケーションを知って再発生する必要のない再初期化ステップをスキップ)。実際には少し面倒です。

どんな提案がありますか?ありがとうございます。

答え1

.bashrcをよりモジュラーにして(エイリアスを使用して.aliasrcを取得するなど)、カスタム環境でその環境に指定したモジュールのみを選択することができます。

答え2

bash --noprofile --norc <<ALIAS
$(alias)
exec </dev/tty
ALIAS

bash --noprofile...エイリアスを知っているビットでこれを実行すると、トリックを実行できますbash

そうでなければ、@WilliamEverettが提案したようにすることができます(私はこれが最終的により良いアプローチだと思います)。これを促進する1つの方法は次のとおりです。

alias >~/.aliasrc
{   cp ~/.bashrc ~/.bashrc.old
    grep -v '^ *alias' <~/.bashrc.old
    echo '. ~/.aliasrc'
} >~/.bashrc

aliasいくつかの定義が複数行の場合は、生成されたrcファイルと保存されている.oldファイルを比較する必要があります。ソート後、次のことができます。

bash --noprofile --rcfile ~/.aliasrc

答え3

あなたは置くことができます

if [ -f ~/.Mayur_Patel_special ]
then
    . ~/.Mayur_Patel_special
    rm ~/.Mayur_Patel_special
fi

.bashrc次に、アプリケーションにファイルを生成させます。そして明らかに走るbash いいえそして--noprofileオプション--norc。複数のインスタンスが同時に実行される可能性がある場合は、PIDを結合してファイル名を一意にします。

関連情報