📑
Fish shell の 1 文字ディレクトリ名を Bash で雑に実現する
はじめに
Fish shell において、デフォルトのプロンプトの場合ディレクトリを巡り深い階層までいくと一番深い階層のディレクトリ名以外は1文字で表示される。
例えばこのような形である。
~ > cd ~/aaa/bbb/ccc/ddd/
~/a/b/c/ddd >
この仕組みは、Fish shell に prompt_pwd
という関数が組み込まれていて、それを標準で呼び出しているからである。
Bashで実現する
上記の prompt_pwd
は Fish で記述されているため、これを愚直に Bash で書き直して PS1
に付与すれば同じ事は出来るはずであるが (たぶん...)、さすがに面倒なので Python3 のワンライナーで雑に作るとこうなる。.bashrc
などに記述して、PS1
に付与すればよい。
.bashrc
export PS1='$(eval "__prompt_pwd") \$'
__prompt_pwd() {
if [[ "$PWD" == "$HOME" ]]; then
echo "~"
elif [[ "$HOME" =~ $PWD ]]; then
echo "$PWD"
else
python3 -c "import sys; dirs = sys.argv[1].split('/'); dir = ['/' + d[:1] for d in dirs[1:-1]]; print(dirs[0] + ''.join(dir) + '/' + dirs[-1])" "${PWD/#$HOME/~}"
fi
}
すると、プロンプトはこんな感じになる。
~ $ cd ~/aaa/bbb/ccc/ddd/
~/a/b/c/ddd $
Discussion