PS1プロンプト、特に/
で区切られた$ PWD部分をカスタマイズしています。
いくつかの中で、私は現在のディレクトリを持つのが好きです。
ただし、ディレクトリが長すぎる場合は、開始...終了します
たとえば、代わりに
otherstuff:~/apps/webs/2014/area1/groupa/current:other_stuff $
最初のディレクトリと最後の2つのディレクトリ、つまり.
otherstuff:~/apps/webs/.../groups/current:other_stuff $
それらが部分的に重なっている場合、つまり.
otherstuff:~/apps/webs/2014:other_stuff $
-> otherstuff:~/apps/webs/2014:other_stuff $
そしてそれらが同じであるとき、すなわち.
otherstuff:~/apps/webs/:other_stuff $
-> otherstuff:~/apps/webs/:other_stuff $
$ PWDで{}、()、{}を使用してさまざまな部分文字列を試しましたが、形式を正しく取得できません。
更新-私はこれをまとめるためにguidosanswer(accepted)の情報を使用しました:
parse_git_branch () {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}
PS1='\033[01;31m\]\t\033[00m\]:'
PS1=$PS1'\[\033[01;32m\]\u\033[00m\]:\033[01;34m\]'
PS1=$PS1'`pwd | sed "s#\(/[^/]\+/[^/]\+/\).*\(/[^/]\+/[^/]\+\)/\?#\1...\2#g"`'
PS1=$PS1'\033[00m\]:\033[01;33m\]$(parse_git_branch)\[\033[00m\]\n\$ '
これにより、次のことが得られます。
悲しい量のコードが3つの白いコロンセパレーターに対して\033[00m\]:
繰り返されます!
このsedコマンドは、タスクに役立つ正規表現を実行します。
sed 's#\(/[^/]\+/[^/]\+/\).*\(/[^/]\+/[^/]\+\)/\?#\1...\2#g'
テスト:
PS1PWD_REGEX='s#\(/[^/]\+/[^/]\+/\).*\(/[^/]\+/[^/]\+\)/\?#\1...\2#g'
$ echo "~/apps/webs/2014/" | sed $PS1PWD_REGEX
~/apps/webs/2014/
$ echo "~/apps/webs/chip/mips/2014/" | sed $PS1PWD_REGEX
~/apps/webs/.../mips/2014
$ echo "~/apps/webs/chip/mips/2014" | sed $PS1PWD_REGEX
~/apps/webs/.../mips/2014
$ echo "/apps/webs/chip/mips/clips/2014" | sed $PS1PWD_REGEX
/apps/webs/.../clips/2014
$ echo "/" | sed $PS1PWD_REGEX
/
$ echo "~" | sed $PS1PWD_REGEX
~
次に、次の行でプロファイルを設定します。
export PS1='[\u@\h `pwd | sed "s#\(/[^/]\+/[^/]\+/\).*\(/[^/]\+/[^/]\+\)/\?#\1...\2#g"`]\$ '
私自身は、最初の行の長いパスに十分なスペースを提供する複数行のプロンプトを好みます。
あなたはそれを分割してあなたが望む部分を選ぶべきです:
( IFS=/ ; set -- $string
while ${1+:} false ; do
echo "$1" ; shift
done
)
開始/終了のみを取得するには:
start_end="$(IFS=/ ; set -- $string ; unset IFS
printf '/%s/.../%s' "$1" \
"`shift $(($#-1)) ; echo "$1"`"
)"