Почему моя функция не переоценена в PS1?

Я пытаюсь иметь часть своей подсказки, установленной динамично функцией, таким образом, в моем .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)\$ "
15
задан 22 November 2018 в 13:45

2 ответа

Согласно Bash запрашивают практическое руководство :

[21:58:33][giles@nikola:~]$ PS1="[\$(date +%H%M)][\u@\h:\w]\$ "
[2159][giles@nikola:~]$ ls
bin   mail
[2200][giles@nikola:~]$

важно заметить обратную косую черту перед знаком доллара замены команды. Без него внешняя команда выполняется точно однажды: когда строка PS1 читается в среду.

22
ответ дан 23 November 2019 в 02:43

Когда Вы использовали $(..) в двойных кавычках, оболочка оценила замену команды прежде, чем присвоить PS1. Таким образом, PS1 содержал только вывод, не саму замену команды. Вместо этого или используйте одинарные кавычки или выйдите эти $, так, чтобы строка была передана как есть PS1 и затем оценена, когда подсказка установлена:

$ PS1='$(pwd) $ '
/tmp $ cd /var
/var $ echo "$PS1"
$(pwd) $ 

Сравните:

/var $ PS1="$(pwd) $ "
/var $ echo "$PS1"
a /var $  a
/var $ 
6
ответ дан 23 November 2019 в 02:43

Другие вопросы по тегам:

Похожие вопросы: