PS1 環境変数に含まれる bash のプロンプト パス短縮機能を実装しました。これにより、作業ディレクトリがよりコンパクトでわかりやすいものに短縮されます。他にどのようなアイデアが存在するのか興味があります。
課題は次のとおりです。
次のように PS1 に含めることができるbash 関数_dir_chomp
を作成します (読みやすくするために改行が挿入されています)。
PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] $(
_dir_chomp "$(pwd)" 20
)\[\033[01;37m\]$(parse_git_branch)\[\033[01;34m\] \$\[\033[00m\] '
「20」はソフトリミットとしての最大長のパラメータです。これらは例です:
/usr/portage/media-plugins/banshee-community-extensions/files
になる/u/p/m/b/files
/home/user1/media/video/music/live-sets
になります~/m/v/m/live-sets
($HOME の代わりに ~ 文字に注意してください)/home/user2/media
変更されません (20 文字の制限を超えていません)/home/user1/this-is-a-very-long-path-name-with-more-than-20-chars
になります~/this-is-a-very-long-path-name-with-more-than-20-chars
(最後のコンポーネントは短縮されません: ソフト リミット)/home/user1/src
になります~/src
($HOME は常に短縮されます)/home/user1/.kde4/share/config/kresources
になります~/.k/s/c/kresources
(接頭辞のドットが保持されることに注意してください)
現在のユーザーは user1 です。
awk
、perl
、などの外部インタープリターを呼び出すことはできますがruby
、python
コンパイルされた C プログラムなどを呼び出すことはできません。つまり、外部ソース ファイルは許可されず、コードはインラインである必要があります。最短バージョンが勝ちます。bash 関数本体 (および呼び出されたサブ関数) の長さは、次のことを意味します。
_sub_helper() {
# this counts
}
_dir_chomp() {
# these characters count (between { and })
_sub_helper "foobar" # _sub_helper body counts, too
}