Я пытаюсь, чтобы часть моего приглашения была установлена динамически с помощью функции, поэтому в моем .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
скрипт, чтобы показать ветку моего репозитория git, когда я в одном, с красивыми цветами и всем остальным, но проблема в том, что он никогда не обновляет имя ветки, когда я меняю репозитории. Тривиальный пример выше - самое простое воспроизведение, которое я мог придумать для своего вопроса.
В .bashrc
линии , которые я должен интегрировать GIT-приглашение сценарий:
source ~/.git-prompt.sh
PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1)\$ "
Ответы:
Согласно Bash подскажите Howto :
источник
При использовании
$(..)
в двойных кавычках оболочка оценивала подстановку команд перед назначениемPS1
. Таким образом,PS1
содержится только вывод, а не сама подстановка команд. Вместо этого либо используйте одинарные кавычки, либо экранируйте$
, чтобы строка передавалась как естьPS1
, а затем вычислялась, когда задано приглашение:Для сравнения:
источник