Команда Bash prompt Execute кожного разу, коли відображається новий запит


11

У мене є такий підказки в bash, який показує поточну гітку git:

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

яка працює, коли я джерело .bashrc, але не коли я змінюю гілку, тому вар PS1 оцінюється лише тоді, коли я надсилаю .bashrc, але його слід оцінювати кожного разу, коли з'являється новий запит. Як це можна досягти за допомогою bash 4.3?

Відповіді:


14

Ваша проблема полягає в тому, що перед її додаванням до $(git_prompt)оцінюваної послідовності обчислюється деякий постійний рядок . Ви повинні замість цього додати код:$PS1

PS1+='$(git_prompt)'

2
це дає помилку bash: command substitution: line 1: syntax error near unexpected token ) 'bash: заміна команд: рядок 1:git_prompt)'
danielr1996

1
Це справді дивно. Зробіть "резервну копію" ( oldPS1="$PS1"), а потім спробуйте:PS1='$(git_prompt) '
Hauke ​​Laging

9

Я тепер це виправив, використовуючи це як підказку

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

перш ніж я об'єднав кілька рядків в одну струну PS1, здавалося, проблема. Трюк полягає в тому, щоб написати a \перед тим, як вилучити команду за допомогою $(git_prompt).

Так $(git_prompt)буде оцінено, коли .bashrcоцінюється і

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


5
Для тих, хто знайде це в майбутньому: Зауважте, що додаються подвійні лапки "навколо рядка. Використання \$(git_prompt)без цих не працює.
дтор

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

@ danielr1996 це текстовий режим (жирний нескінченний блимання підкреслюють {0..5}, у цій функції він встановлений на 01, якщо аргументу немає
Jonah

0

Хочете побачити божевілля? Ось як я будую своє баш-підказку:

# 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

Я не великий фанат кольору.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.