答え1
たくさん借りるDenis Karlsmakerの答え:
PROMPT_COMMAND='_abbrev_pwd=$(sed -e "s:$HOME:~:" -e "s:/\(.\)[^/]*:/\1:g" <<< "$(dirname "$PWD")")/"$(basename "$PWD")"'
PS1='\u@\h ${_abbrev_pwd}> '
PROMPT_COMMAND変数は特殊bash変数このコマンドは、プロンプトが印刷されるたびに実行されます。ここのコードは、_abbrev_pwd
次の要素に関連付けられた変数を設定します。
- sedコマンドの出力:
$(sed -e ... <<< ...)
- スラッシュ
/
- 「現在のディレクトリ:
$(basename "$PWD")
sedコマンド自体は、ここにある文字列を入力として使用します。ここにある文字列は、dirname "$PWD"
現在のディレクトリを削除するための呼び出しの結果です。これにより、文字列は2つの置換を受けます(-e
sedオプションで指定)。
- "$HOME"ディレクトリの外観をチルダに置き換えます。
- すべてのパス要素(スラッシュ、キャプチャされた単一文字
.
、任意の数の非順方向スラッシュ)を、スラッシュの後に対応する(キャプチャされた)単一文字に置き換えます。 「global」フラグを使用してこのパターンマッチングを繰り返しますg
。私は避けるために、共通ではなく検索と置換の区切り文字:
として使用します。sed
/
傾いたつまようじ症候群脱出しよう欲しいスラッシュ。
_abbrev_pwd
最後に、通常のバッチを使用するようにPS1を設定します$PWD
。