bashプロンプトに現在のディレクトリと親ディレクトリのみを表示する



Show Only Current Parent Directory Bash Prompt



解決:

Bashのプロンプト制御機能はかなり静的です。より詳細な制御が必要な場合は、プロンプトに変数を含めることができます。オフになっていないことを確認してくださいpromptvarsオプション。

PS1 = '$ {PWD#' $ {PWD%/ * / *} / '}  $'

一重引用符に注意してください。変数の展開は、プロンプトが表示されたときではなく、プロンプトが表示されたときに行う必要があります。PS1変数が定義されています。



表示内容をより細かく制御したい場合は、コマンド置換を使用できます。たとえば、上記のスニペットは〜ホームディレクトリの略語。

PS1 = '$($ HOMEの$ PWDの場合)HPWD ='〜 ';; $ HOME / * / *)HPWD = '$ {PWD#' $ {PWD%/ * / *} / '}' ;; $ HOME / *)HPWD = '〜/ $ {PWD ## * /}' ;; / * / * / *)HPWD = '$ {PWD#' $ {PWD%/ * / *} / '}' ;; *)HPWD = '$ PWD' ;; esac; printf%s '$ HPWD') $ '

このコードはかなり面倒なので、コードを貼り付ける代わりにPS1変数、あなたは使用することができます設定するコードを実行するためのPROMPT_COMMAND変数HPWDを選択し、プロンプトで使用します。



PROMPT_COMMAND = 'case $ PWD in $ HOME)HPWD ='〜 ';; $ HOME / * / *)HPWD = '$ {PWD#' $ {PWD%/ * / *} / '}' ;; $ HOME / *)HPWD = '〜/ $ {PWD ## * /}' ;; / * / * / *)HPWD = '$ {PWD#' $ {PWD%/ * / *} / '}' ;; *)HPWD = '$ PWD' ;; esac'PS1 = '$ HPWD  $'

短縮されたプロンプトはディレクトリの変更時にのみ変更されるため、プロンプトが表示されるたびにプロンプ​​トを再計算する必要はありません。 Bashは、現在のディレクトリ変更で実行されるフックを提供しませんが、オーバーライドすることでシミュレートできますcdとそのいとこ。

cd(){組み込みcd '[メール保護]' && chpwd; } pushd(){組み込みpushd '[メール保護]' && chpwd; } popd(){組み込みpopd '[メール保護]' && chpwd; } chpwd(){case $ PWD in $ HOME)HPWD = '〜' ;; $ HOME / * / *)HPWD = '$ {PWD#' $ {PWD%/ * / *} / '}' ;; $ HOME / *)HPWD = '〜/ $ {PWD ## * /}' ;; / * / * / *)HPWD = '$ {PWD#' $ {PWD%/ * / *} / '}' ;; *)HPWD = '$ PWD' ;; esac} PS1 = '$ HPWD  $'

エクスポートする必要はなく、エクスポートするべきでもないことに注意してくださいPS1はシェル設定であり、環境変数ではないため。バッシュPS1の設定は、他のシェルでは理解できません。

追伸優れたインタラクティブなシェルエクスペリエンスが必要な場合は、zshに切り替えてください。主にtcshを含む%拡張、chpwdなど)はネイティブ機能です。



PS1 = '%2〜%#' 

親ディレクトリと現在のディレクトリを取得するための構文は、Munaiの回答から取得されます。

ただし、Gillesが指摘しているように、そのコードにはその時点での現在のディレクトリのみが表示されます。.bashrcがロードされますが、システムを他のフォルダーに移動しても変更されません。

あなたの中にこれを持っている.bashrcファイルを使用すると、プロンプトが現在のディレクトリに自動的に更新されます。

prompt_command(){PS1 = '$(basename $(dirname' $ PWD '))/ $(basename' $ PWD ')$'} PROMPT_COMMAND = prompt_command