私はbashを学んでいますが、その間に_.bash_profile
_ファイルをいじって挨拶メッセージなどを入れることができました。後でこれらの変更を削除しました。しかし、それを行った後、プロンプトのデフォルト構成は失われました:元々、プロンプトはすべて太字で、_\w
_部分は青色でした。私はそれがUbuntuのデフォルトだったと思います(間違っていれば私を修正します)が、それが失われ、私のプロンプトが太字ではなく単色であったため、長い名前のディレクトリにいるときに混乱します。
それで、昨夜、私は上記の方法でプロンプトをカスタマイズしようとしました。 _.bash_profile
_にコードを追加した後、うまく機能しました
コードは次のようなものでした:
_export PS1="\[$(tput bold)\]\u@\h:\[$(tput sgr 0)\]\e[1;34m\w$ \e[m"
_
ただし、現在のシェルで別のbashシェルを実行しようとすると、プロンプトはフォーマットされなくなります。
それは正常ですか?変数をエクスポートして、そのシェルからフォークされたすべての子プロセスからアクセスできるようにすることの全体のポイントではありませんか?なぜこの状況に当てはまらないのですか?
TL; DR:PS1
への呼び出しを~/.bashrc
に入れるか、-l
フラグでサブシェルを呼び出す
Zannaの答えは、PS1
内の~/.bashrc
を対話型シェルによってソースされるように設定することを適切に示唆しています。
ただし、-l
フラグを使用して、サブシェルをログインシェルとして扱うことができます。
DIR:/xieerqi|04:25|skolodya@ubuntu:
$ echo "PS1='TEST$ '" > ~/.profile
DIR:/xieerqi|04:25|skolodya@ubuntu:
$ bash
xieerqi@eagle:~$ exit
DIR:/xieerqi|04:25|skolodya@ubuntu:
$ bash -l
TEST$
それは正常ですか?変数をエクスポートして、そのシェルからフォークされたすべての子プロセスからアクセスできるようにすることの全体のポイントではありませんか?なぜこの条件に当てはまらないのですか?
はい、それは予想される動作です。何かをエクスポートすると、変数はサブシェルに下向きに伝播するはずです。
xieerqi@eagle:~$ export VAR=303
xieerqi@eagle:~$ bash
xieerqi@eagle:~$ echo $VAR
303
xieerqi@eagle:~$ ksh
$ echo $VAR
303
問題は再び~/.bashrc
です。 デフォルト~/.bashrc
ファイルには、PS1
をオーバーライドする行があります。そのため、変数was exportedが、その後、対話型シェルが~/.bashrc
をソースとして使用しました。この状況の例は、 nix Stackexchange の質問の1つで Gilles 'answer によって観察されています。
~/.profile
に関しては、そこから環境変数を設定およびエクスポートすることが実際に推奨されており、頻繁に行われています。
一番最初のシェルが色付けされた理由に関するザンナのコメントに対処するために、私はこれが原因だと信じています:
Bashが対話型ログインシェルとして起動された場合。 。 。ファイル/ etc/profileが存在する場合は、最初にそのファイルからコマンドを読み取って実行します。そのファイルを読み取った後、〜/ .bash_profile、〜/ .bash_login、および〜/ .profile、をその順序で検索し、コマンドを読み取って実行します存在し、読み取り可能な最初の1つ。 (bashのmanページから、強調が追加されました)
ログインすると、bash
が~/.bash_profile
を見つけ、最初に見つかったファイルとして取得します。他のシェルは対話型の非ログインシェルであるため、~/.bashrc
のみがソースになります。
.bash_profile
は、ログインシェルのみから提供されます。 Xセッションにログインしたときに取得され、@ Sergが詳細に説明するように継承された環境です。どういうわけか、この環境が.bashrc
によってオーバーライドされない構成を管理しており、おそらくデフォルトでログインシェルを開くように端末を設定しています。次のように端末を構成することで、あなたが経験した動作を再現できます。
これにより、シェルはログインシェルとして開かれますが、呼び出された子はすべて非ログインシェルになり、@ Sergが示唆するように.bashrc
ではなく、.bash_profile
ではなく-l
をソースにしますフラグが使用されます。
TL; DR
カスタムプロンプトをインタラクティブシェルから取得する場合は、.bashrc
にコードを入力します