0

対話型シェルと非対話型シェルに苦労しています。どれがどれだかわかりません。

たとえば、非対話型シェルは通常BASH_ENV、起動時に変数をチェックし、それが指すものは何でも実行することを読んだことがあります。

それで、私がしたことは、BASH_ENVOKをエコーするだけのスクリプトを指すように設定したことです。次にbash、ターミナルに入力すると、このスクリプトはOKをエコーし​​ました。しかし、なぜ?ターミナルで bash と入力して、さらに別の INTERACTIVE シェルを呼び出していませんか? その逆ではありませんか? なぜ bash_env を実行したのですか? 私はLinux Mint Mayaを使用しています。

4

2 に答える 2

2

確かなことは、マンページ(「参考文献」を参照) に示されている内容だけです。これには、各インスタンスで実行される起動ファイルの詳細がリストされています。bashINVOCATION

ただし、通常は実行されない他のファイルを実行しているスタートアップ ファイルの 1 つを (たとえば) 停止することはできません。

例として、.bash_profile次の行があるとします。

. ~/.profile

また、スクリプトを実行し.profileます。

実際、マンページには次のように記載されています。

bash が非対話的に開始されると、たとえば、シェル スクリプトを実行するために、環境内で変数 BASH_ENV が検索され、そこに表示される場合はその値が展開され、展開された値がファイルの名前として使用され、読み取られて実行されます。 . Bash は、次のコマンドが実行されたかのように動作します。

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

したがって、 のような対話型シェルの起動スクリプトにその正確な行を入れると、~/.bash_profileが指すファイルも source されBASH_ENVます。

あなたの最善の策は、INVOCATION セクションを調べて、どのファイルが実行されるかを調べてから、(set -xスクリプトの上部にあるようなもので) それらを追跡して、どこから何が呼び出されているかを確認することです。

于 2013-04-23T06:09:53.500 に答える
0

メモリが機能する場合、Bashはあなたがそれを伝えた場合にのみインタラクティブです、例

bash -i

したがって、あなたが呼び出すだけでbash、非インタラクティブな Bash が呼び出されます。

より詳しい情報

-私

-i オプションが存在する場合、シェルは対話型です。
于 2013-04-23T06:11:34.540 に答える