每次显示新提示时,Bash提示执行命令


11

我在bash中有以下提示,其中显示了当前的git分支:

PS1+="$(git_prompt)" #git_prompt is a function in my .bashrc

当我获取.bashrc时有效,但当我更改分支时无效,因此PS1 var仅在我获取.bashrc时得到评估,但每次显示新提示时都应对其进行评估。如何使用bash 4.3做到这一点?

Answers:


14

您的问题是,$(git_prompt)在将常量字符串添加到之前,已对其求值$PS1。您必须添加代码:

PS1+='$(git_prompt)'

2
这给出了错误bash: command substitution: line 1: syntax error near unexpected token )'bash:命令替换:行1:git_prompt)'
danielr1996 '16

1
真的很奇怪 进行“备份”(oldPS1="$PS1"),然后尝试:PS1='$(git_prompt) '
Hauke Laging,2013年

9

我现在通过使用它作为提示来修复它

PS1="$green\u $r@ $red\h $r: $yellow\W \!$r \$(git_prompt) \n$yellow\$ $r"

在将多个字符串连接到一个PS1字符串之前,似乎存在问题。技巧是\在使用命令执行命令之前先编写一个$(git_prompt)

因此$(git_prompt)将在评估时.bashrc进行评估,

\$(git_prompt) 每次显示新提示时都会进行评估


5
对于以后会发现此问题的任何人:请注意"字符串周围的双引号。使用\$(git_prompt)没有那些不起作用。
dthor '16

1

尝试在您的ps1中使用单引号

PS1+='$(git_prompt)'

我也建议我的psOne功能

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\] \$ '
}

在此处输入图片说明


这看起来很有趣,您能解释一下ps1tm的用途吗?
danielr1996 '16

@ danielr1996,它是文本模式(粗体,粗体,闪烁的下划线{0..5},在此功能中,如果不存在任何参数,则将其设置为01
Jonah

0

想看疯狂吗?这就是我构造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

我不喜欢颜色。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.