PS1="\`если [ \$? = 0 ]; то... фи\`
Обновление: я попробовал простую "$()", но это не сработало. И теперь я еще больше озадачен, потому что если добавить косую черту, это работает - "\$()".
\
— это обратная, а не прямая косая черта.Вам нужно экранировать здесь
$
по той же причине, по которой вы избежали обратных кавычек в первом фрагменте: потому что в противном случае подстановка команды разворачивается немедленно, при установкеPS1
, а не когдаPS1
используется для создания подсказки.Лучше использовать одинарные кавычки вокруг присваивания, они предотвратят расширение переменных и подстановку команд для всей строки.
PS1='$(if [ $? != 0 ]; then echo -e "\[\e[1;31m\][boom]\[\e[0m\] "; fi)\u@\h \w\$ '
Обратите внимание, что вам нужно заключить escape-коды в
\[ ... \]
, чтобы сообщить bash, что они не печатаются и что он не должен учитывать их при вычислении ширина подсказки (упоминается вскользь в мануале). (Я не знаю, может ли Bash правильно работать с графическими символами, которые вы использовали, и я не могу проверить.)