bashで長いパスをいい感じに表示する$PS1

bashで深いパスに居ると、プロンプトが長くなって、嫌になりますよね。

こんなふうに。

user@/home/user/extraordinary/deep/directory/you/are/currently/working/at
$ 

fishのような現代的なシェルを使うと、中間部分をいい感じに省いてくれます。

user@/h/u/e/d/d/y/a/c/w/at
$ 

fishを導入すれば解決ですが、この程度であればbashrcをちょっといじるだけでも、解決できます。

short_pwd() {
    cwd=$(pwd | sed -e "s@^$HOME@~@" | awk -F'/' '{for(i=1;i<NF;++i) printf substr($(i), 0, 1) "/"; printf $NF}')
    echo -n $cwd
}

export PS1='\[\033[01;32m\]@\[\033[01;36m\] $(short_pwd) \n\[\033[01;34m\]\$\[\033[00m\] '