回答:
これを試してください:
PROMPT_COMMAND='PS1X=$(perl -pl0 -e "s|^${HOME}|~|;s|([^/])[^/]*/|$""1/|g" <<<${PWD})'
または、純粋なbash:
PROMPT_COMMAND='PS1X=$(p="${PWD#${HOME}}"; [ "${PWD}" != "${p}" ] && printf "~";IFS=/; for q in ${p:1}; do printf /${q:0:1}; done; printf "${q:1}")'
それから
PS1='\u@\h ${PS1X} $ '
(~
forに注意してください${HOME}
):
rfkrocktk@work-laptop ~/D/P/W/m/s/m/j/c/tkassembled $
@enzotibのおかげで答えを改善しました
$PWD
→ ~
テストを詳しく調べてください。場合は、現在、HOME
ある/home/ed
とPWD
され/home/edwina
、あなたが得る~wina
Perlのバージョンでと~/ina
シェルバージョンで。(2)現在のディレクトリにワイルドカード(パス名の展開)文字が含まれている場合、シェルコードは停止します。例えば、PWD
= /abc/*/def
。これを修正するには、set -o noglob
またはを追加しset -f
ます。…(続き)
$HOME
(二重引用符内)で$PWD
十分です。シェルコマンドでは、最後の3つのシェル変数の参照が細かいですが、最初の3つはすることができ"${PWD#$HOME}"
、"$PWD"
と"$p"
。(4)mbentleyの回答とそのコメントも参照してください。
私PROMPT_DIRTRIM
はbashが好きです...
export PROMPT_DIRTRIM=2
例のプロンプトを...に変更します
rfkrocktk@work-laptop ../com/tkassembled/ $
わたしにはできる。
enzotibの答えに追加すると、次のスニペットは次のようになります。
/Path/To/Your/Home/
します~/
(したがって、パスはの~/a/b/c
代わりになります/P/T/Y/H/a/b/c
) ドットのみを表示する代わりに、「ドットファイル」の最初の文字を使用します(/a/./c/d
になります/a/.b/c/d
)。
PROMPT_COMMAND='PS1_PATH=$(sed "s:\([^/\.]\)[^/]*/:\1/:g" <<< ${PWD/#$HOME/\~})'
export PS1='\u@\h:$PS1_PATH\$ '
必ず一重引用符を使用してください。そうしないと、bashは早まってそれを展開します。
で使用する形式PS1
は\W
(manページのPROMPTING
セクションをbash
参照)です。
PS1="\u@\h \W\$ "
そして、そこにある他のオプションを読みたいと思うかもしれません。あなたのコマンドラインでいくつかのクールなことができます。
nicerobotの例の出力は気に入っていますが、1つの問題が見つかりました。ハイフンを含むディレクトリがあり、それが現在の作業ディレクトリだったときの引数としてA-E
見てい-E
ましたprintf
。これを修正する--
ために、最後printf
に追加し、出力するものがない場合に備えて、出力の周りに引用符を追加しました。
p="${PWD#${HOME}}"; [ "${PWD}" != "${p}" ] && printf "~";IFS=/; for q in ${p:1}; do printf /${q:0:1}; done; printf -- "${q:1}"
-
2番目の文字として含まれるディレクトリ名の問題をよくキャッチします。がで--
始まる引数の問題の一般的な解決策であるのは事実ですが-
、のより良い方法printf
はprintf "%s" "${q:1}"
、を含む引数からも保護するためです%
。(たとえば、してみてくださいPWD
= /home/mbentley/Documents/Projects/Work/maventest/src/main/java/com/abc%def
(2)nicerobotの答えにも、私のコメントを参照してください。。
rfkrocktk@work-laptop ~/D/P/W/m/src/main/java/com/tkassembled/ $
何ですか?理想的には、最大プロンプト長のしきい値を使用しますか?