我在 bash 中有以下提示,显示当前的 git 分支:
PS1+="$(git_prompt)" #git_prompt is a function in my .bashrc
当我获取 .bashrc 时,它会起作用,但当我更改分支时则不起作用,因此仅当我获取 .bashrc 时,才会评估 PS1 var,但每次显示新提示时都应该评估它。 bash 4.3 如何实现这一点?
答案1
我现在通过使用它作为提示修复了它
PS1="$green\u $r@ $red\h $r: $yellow\W \!$r \$(git_prompt) \n$yellow\$ $r"
在我将多个字符串连接到一个 PS1 字符串之前,似乎存在问题。诀窍是\
在执行命令之前写一个$(git_prompt)
。
因此将在评估$(git_prompt)
时进行评估并且.bashrc
\$(git_prompt)
每次显示新提示时都会进行评估
答案2
你的问题是$(git_prompt)
被评估为一些常量字符串前它被添加到$PS1
.您必须添加代码:
PS1+='$(git_prompt)'
答案3
尝试在你的 ps1 中使用单引号
PS1+='$(git_prompt)'
我也建议我的个人电脑功能
psOne ()
{
ps1tm=${1:-01};
ps1tc=(30 31 32 33 34 35 36 37 38);
PS1='${debian_chroot:+($debian_chroot)}\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\]\u\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\]@\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\]\h\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\] :\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\] \w\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\] \$ '
}
答案4
想看疯狂吗?这就是我构建 bash 提示符的方式:
# inspiration: http://www.stumbleupon.com/su/2LpQMi
user_host_path="${debian_chroot:+($debian_chroot) }"'\u@\h:\w'
xterm_title='\[\e]0;'"$user_host_path"'\a\]'
[[ $TERM == xterm* || $TERM == rxvt* ]] && line1="${xterm_title}"
git_branch='$(git_current_branch " (%s)")'
line1="${line1}${user_host_path}${git_branch} "
line2='\$ '
print_time='{ printf "%*s" $(($(tput cols) - 10)) " "|sed -e "s/./˙/g" -re "s/.{6}(..)$/ bash \1/"; date "+ %T"; } >&2'
color_bold='\[\e[0;1m\]'
color_reset='\[\e[0m\]'
PROMPT_COMMAND="_rc_=\$?;${print_time};((_rc_!=0)) && PS1='${line1}\n${color_bold}[\$_rc_]${color_reset} ${line2}' || PS1='${line1}\n${line2}'"
unset user_host_path xterm_title color_bold color_reset line1 line2 print_time git_branch
我不太喜欢色彩。