/
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は{}、()、{}を使用してさまざまな部分文字列を試しましたが、フォーマットを正しく取得できませんでした。
更新 - guidosの回答情報を使用してこれをクリーンアップしました(受け入れられました)。
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\$ '
生産する:
\033[00m\]:
白いコロンの区切り記号3つに対して多くのコードが繰り返されることは残念です!
答え1
この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"`]\$ '
私は個人的に、最初の行の長いパスに十分なスペースを提供する複数行のヒントを好みます。
答え2
これを分割し、必要な部分を選択する必要があります。
( 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"`"
)"