Команда Bash prompt execute каждый раз, когда отображается новое приглашение

У меня есть следующее приглашение в bash, которое показывает текущую ветку git:

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

который работает, когда я создаю .bashrc, но не когда я изменяю ветвь, поэтому переменная PS1 оценивается только тогда, когда я получаю .bashrc, но она должна оцениваться каждый раз, когда отображается новое приглашение. Как это можно сделать с помощью bash 4.3?

    4 Solutions collect form web for “Команда Bash prompt execute каждый раз, когда отображается новое приглашение”

    Ваша проблема в том, что $(git_prompt) вычисляется до некоторой константной строки, прежде чем она будет добавлена ​​в $PS1 . Вместо этого вы должны добавить код:

     PS1+='$(git_prompt)' 

    Я исправил это сейчас, используя это как приглашение

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

    до того, как я объединил несколько строк в одну строку PS1, казалось, была проблема. Хитрость заключается в том, чтобы написать \ перед тем, как выполнить команду с помощью $(git_prompt) .

    Таким образом, $(git_prompt) будет оцениваться при оценке .bashrc и

    \$(git_prompt) будет оцениваться каждый раз, когда отображается новое приглашение

    попробуйте одинарную цитату в вашем 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\] \$ ' } 

    введите описание изображения здесь

    Хотите увидеть безумие? Вот как я создаю мою подсказку 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 

    Я не большой поклонник цвета.

    Linux и Unix - лучшая ОС в мире.