web-dev-qa-db-ja.com

bash PS1変数をエクスポートするかどうか

ログインシェルとインタラクティブシェルを読むのに多くの時間を費やしただけで、さまざまなプロファイルやbashrcファイルに環境変数やシェル関数などを設定する必要があるかどうかを確認しました。 この投稿 で、プロンプトオプションなどのbash固有のものは〜/ .bashrcに設定する必要があると述べました。そのため、PS1変数について疑問に思いました。これに関して私が見てきたすべての例では、export PS1=""。これはbashに対してのみ意味があるため、本当に環境にエクスポートする必要がありますか?ただ持っているPS1=""〜/ .bashrcで意図した効果が得られますが、何か不足しているのではないかと思っています。

9
Mike Sweeney

正解です。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