bashプロンプトで絶対パスを表示するにはどうすればよいですか?


50

現在、bash PS1は次のように設定されています。

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\w\n\$ "

どのように私はそれが絶対パスの代わりに、相対1(例えば表示させることができます/home/dave/dirの代わりに~/dir)?


1
/home/dave/dirそして~/dir両方の絶対パスです、第二は、自分のホームディレクトリの略称を使用しています。相対パスとは、ルート()で始まるのではなく、現在のディレクトリ(例:)からの相対パスです。../dir/
ダグハリス

3
ps前のコマンドの終了ステータスを示すために色をうまく使用しています。おそらく私が気に入ったプロンプトでの色の最初の使用。
ダグハリス

@Doug Harris:訂正してくれてありがとう。私もこの色が好きです。私が最初に見た場所を覚えていない(おそらく以前のSUの投稿で?)
デビッドB

\u@\H[\w]:~\$作るuser@host[~/path]:~$
JREAM

回答:


48

に置き換え\wてください\$PWD

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\$PWD\n\$ "

とにかくちょっとしたヒントを気にしたら、私は次のようなものを書くでしょう:

PS1='\[`[ $? = 0 ] && X=2 || X=1; tput setaf $X`\]\h\[`tput sgr0`\]:$PWD\n\$ '

3
私もこれを考えましたが、$PWDPS1コールごとにではなく、への割り当て時に評価されます。ただし、ドル記号をエスケープすると機能し\$PWDます。これにより、ドル記号は割り当て時のドル記号になり、変数の評価は各プロンプトで発生します。あなたに+1。
ダグ・ハリス

その\ ありがとう。
サイラス

+1ありがとう!あなたの美しいbashライン(「ヒント」)で魔法を説明してもらえますか?
デビッドB

承知しました。読みやすさと移植性(?)のために、制御文字を直接書くのではなく、tput(詳細はman tputを参照)を使用して色を変更しました。また、単一引用符を使用して二重引用符とバックスラッシュを削除しました。最後に、変数を使用することで、冗長性を回避しました。
cYrus


0

bashのps1で; -Wは相対で、-wは絶対である必要があります。したがって、上記ではすでに絶対??が必要です。

http://wiki.archlinux.org/index.php/Color_Bash_Prompt


3
絶対|相対| full | current_dirを混同していると思います。W現在のディレクトリ名のみをw表示し、フルパスを表示しますが、それでも相対パスを使用します。
デビッドB

私の用語ではなく、URLの用語でした:)
Sirex

0

Humm〜/ dirは絶対パスですが、「ショートカット」を使用します。たとえばcd /usr/local、プロンプトを表示すると、おそらく/ usr / localの完全パスが表示されます。とにかく、あなたはすでにフルパスを持っています:-)

しかし、おそらくあなたの正しい質問は、〜のようなショートカットなしでフルパスを表示する方法です?

しかし、私はその答えを知りませんし、その男を見ると、それが(少なくとも文書化されている)ように見えます。


0

pwdを使用する代わりに実行します\W

シンプルバージョン:

export PS1="\`pwd\` $ "

コードでこれを使用する:

export PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\`pwd\`\n\$ "

1
マイナーポイント:Googleのbashスタイルガイドごとに、バックティックよりも$(pwd)を優先します。ネストの際にバックティックをエスケープする必要があり、$()はそうしないためです。
ファンロール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.