ログインシェルとインタラクティブシェルを読むのに多くの時間を費やしただけで、さまざまなプロファイルやbashrcファイルに環境変数やシェル関数などを設定する必要があるかどうかを確認しました。 この投稿 で、プロンプトオプションなどのbash固有のものは〜/ .bashrcに設定する必要があると述べました。そのため、PS1変数について疑問に思いました。これに関して私が見てきたすべての例では、export PS1=""
。これはbashに対してのみ意味があるため、本当に環境にエクスポートする必要がありますか?ただ持っているPS1=""
〜/ .bashrcで意図した効果が得られますが、何か不足しているのではないかと思っています。
正解です。PS1
はbashのインタラクティブなインスタンスでのみ意味があるため、~/.bashrc
で設定し、エクスポートしないでください。 PS1
は他のシェルでも意味がありますが、プロンプトの展開がシェル間で異なるため、意味が異なります。実際、bashのインスタンス間でも、PS1
の意味はシェルのオプション(少なくともpromptvars
)に依存するため、異なる可能性があります。
PS1
を.profile
から環境にエクスポートすることは、それを使用するシェル(Bourneシェル)が1つしかなく、構成ファイルがなかった1970年代への逆戻りです。常に同じシェルを使用し、それを別様に構成しない場合でも、現在でも機能します。ただし、純粋にスクリプト用に設計されていないすべての最新のシェル(csh、ksh、bash、zsh、…)は、対話式に起動すると構成ファイルを読み取ります(.cshrc
、.kshrc
、.bashrc
、.zshrc
、…)、1970年代のメソッドは不要になりました。シェル固有のファイルにPS1
とその他のシェル固有の設定を設定し、環境にエクスポートしないことで、異なるシェル構成、異なるシェル、または対応していない別の端末を使用したときに問題が発生するのを回避できますあなたのいつものプロンプトの空想を示すことの。シェル固有のファイルでPS1
を設定すると常に機能しますが、.profile
で設定してエクスポートすると「単純な」ケースでしか機能しないため、正しく行わない理由はありませんが、 Webには多くの悪いチュートリアルがあり、ディストリビューションには悪いデフォルト設定さえあります。 C'est la vie。