#bash #ps1
#bash #ps1
Вопрос:
Ниже приведено то, что у меня сейчас есть в файле .bashrc, расположенном в моем домашнем каталоге.
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* (.*)/ (1)/';
}
PS1='n' # New line
PS1=$PS1'[33[01;32m]u' # Username
PS1=$PS1' [33[00m]at [33[01;35m]h' # at Hostname
PS1=$PS1' [33[00m]in [33[01;36m]W' # in Directory
PS1=$PS1'[33[01;33m]$(parse_git_branch)' # Git branch
PS1=$PS1'[33[00m]n$ ' # New line and prompt
export PS1
Это приглашение bash должно быть
user at host in ~ (main)
$
когда в основной ветви репозитория git в моем домашнем каталоге. Вместо этого приглашение bash
user at host in ~$(parse_git_branch)
$
Функция в определении PS1 просто отображается в виде текста в приглашении, а не оценивается.
У кого-нибудь есть представление о том, почему это происходит?
Редактировать:
При изменении строки, вызывающей функцию, для использования двойных кавычек и удаления косой черты перед вызовом, как показано ниже,
PS1=$PS1"[33[01;33m]$(parse_git_branch)"
ветка git отображается правильно при первом открытии bash, но не обновляется. Если я изменю строку, вызывающую функцию, чтобы по-прежнему использовать двойные кавычки, но включить косую черту или использовать одинарные кавычки без косой черты, как показано ниже,
PS1=$PS1"[33[01;33m]$(parse_git_branch)"
PS1=$PS1'[33[01;33m]$(parse_git_branch)'
При открытии bash я получаю следующую ошибку,
$ bash
bash: command substitution: line 1: syntax error near unexpected token `)'
bash: command substitution: line 1: `parse_git_branch)'
EDIT2:
Проблема была исправлена путем изменения строки, вызывающей функцию, на
PS1=$PS1'[33[01;31m]`parse_git_branch`'
как показано здесь.
Комментарии:
1. Помогает ли это ?
2. Вы пытаетесь использовать две крайности: дважды экранировать
$
, заключая его в одинарные кавычки и добавляя к нему обратную косую черту, и вообще не экранировать его внутри двойных кавычек. Ее нужно экранировать один раз : либо в одинарных кавычках без дополнительной обратной косой черты, либо в двойных кавычках с обратной косой чертой. (Ошибка в вашем редактировании вызвана чем-то другим; что, непонятно.)3. Вам также не нужно экспортировать
PS1
; любая оболочка, которая заботится о своем значении, уже является источником.bashrc
.4. Ошибка в первой строке предполагает, что проблема определяется
parse_git_branch
в первую очередь, а не ваша попытка использовать ее в приглашении.5. @Michael Kistler: если вы найдете ответ на свой собственный вопрос, вы можете опубликовать его как ответ (и выбрать его как правильный ответ!) Вместо редактирования вашего вопроса 🙂