【发布时间】:2016-07-12 15:25:18
【问题描述】:
我希望缩短我的 bash 提示路径:
~/workspace/project/my-project
# Should be
~/w/p/my-project
这可以通过将//之间的部分路径字符串缩短到第一个字符来实现。
有没有办法做到这一点,例如在 sed 中?
编辑:
认为其他人研究这个可能会发现我结束的内容很有用,所以我在这里编辑它。
.bashrc:
dir_chomp () {
pwd | sed "s|^$HOME|~|" 2> /dev/null | sed 's:\(\.\?[^/]\)[^/]*/:\1/:g'
}
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\[\033[32m\]\$(dir_chomp)\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "
提示示例(不显示颜色):
~/w/e/coolstuff (master) $
~/.c/A/Cache $
【问题讨论】:
-
我觉得这肯定是错误的,因为这个
parse_git_branch() { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/' }在这个提示中工作正常:export PS1="\[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ " -
@lurker:但是,如果你设置
PS1=\$(parse_git_branch),那么PS1是每次都重新计算。 -
你应该看看this的帖子。
-
@lurker 它正在每次都被评估,试试看。
-
@drewyupdrew 感谢您的链接,不幸的是 bash 功能似乎不起作用,我不想安装 ruby 来运行它。