我实现了一个提示路径缩短器,以便将 bash 包含在 PS1 环境变量中,它将工作目录缩短为更紧凑但仍具有描述性的内容。我很好奇可能存在哪些其他想法。
这是挑战:
创建一个_dir_chomp
可以像这样包含到 PS1 中的 bash 函数(插入换行符以提高可读性):
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
}