Я пытаюсь иметь часть своей подсказки, установленной динамично функцией, таким образом, в моем .bashrc
Я имею:
asdf ()
{
echo -n $(pwd)
}
PS1="\u@\h:\w $(asdf)\$ "
Открытие оболочки дает мне, что я ожидаю сначала:
$ bash
darthbith@server:~/test /home/darthbith/test$
Однако, когда я изменяю каталог, часть, определенная функцией, не изменяется:
darthbith@server:~/test /home/darthbith/test$ cd ~/test2
darthbith@server:~/test2 /home/darthbith/test$
Моя фактическая цель состоит в том, чтобы использовать git-prompt.sh
сценарий для показа ответвления моего репозитория мерзавца, когда я нахожусь в одном с симпатичными цветами и всем, но проблема состоит в том, что это никогда не обновляет имя ответвления, когда я изменяю репозитории. Тривиальным примером выше является самое простое воспроизведение, которое я мог придумать для своего вопроса.
.bashrc
строки, что я должен интегрировать быстрый мерзавцем сценарий:
source ~/.git-prompt.sh
PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1)\$ "
Согласно Bash запрашивают практическое руководство :
[21:58:33][giles@nikola:~]$ PS1="[\$(date +%H%M)][\u@\h:\w]\$ " [2159][giles@nikola:~]$ ls bin mail [2200][giles@nikola:~]$
важно заметить обратную косую черту перед знаком доллара замены команды. Без него внешняя команда выполняется точно однажды: когда строка PS1 читается в среду.
Когда Вы использовали $(..)
в двойных кавычках, оболочка оценила замену команды прежде, чем присвоить PS1
. Таким образом, PS1
содержал только вывод, не саму замену команды. Вместо этого или используйте одинарные кавычки или выйдите эти $
, так, чтобы строка была передана как есть PS1
и затем оценена, когда подсказка установлена:
$ PS1='$(pwd) $ '
/tmp $ cd /var
/var $ echo "$PS1"
$(pwd) $
Сравните:
/var $ PS1="$(pwd) $ "
/var $ echo "$PS1"
a /var $ a
/var $