Echo расширен PS1

У меня есть сценарий оболочки, который выполняет одну и ту же команду в нескольких каталогах ( fgit ). Для каждого каталога я хотел бы показать текущее приглашение + команду, которая будет там выполняться. Как получить строку, соответствующую декодированному (расширенному) PS1 ? Например, мой PS1 по умолчанию -

${debian_chroot:+($debian_chroot)}\[\e[1;32m\]\u\[\e[0m\]@\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]$(__git_ps1 ' (%s)')$

, и я хотел бы повторить полученное приглашение Я хотел бы показать текущее приглашение + команду, которая будет там выполняться. Как получить ...

У меня есть сценарий оболочки, который выполняет одну и ту же команду в нескольких каталогах ( fgit ). Для каждого каталога я хотел бы показать текущее приглашение + команду, которая будет там выполняться. Как получить строку, соответствующую декодированному (расширенному) PS1 ? Например, мой PS1 по умолчанию -

${debian_chroot:+($debian_chroot)}\[\e[1;32m\]\u\[\e[0m\]@\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]$(__git_ps1 ' (%s)')$

, и я хотел бы повторить полученное приглашение Я хотел бы показать текущее приглашение + команду, которая будет там выполняться. Как получить ...

У меня есть сценарий оболочки, который выполняет одну и ту же команду в нескольких каталогах ( fgit ). Для каждого каталога я хотел бы показать текущее приглашение + команду, которая будет там выполняться. Как получить строку, соответствующую декодированному (расширенному) PS1 ? Например, мой PS1 по умолчанию -

${debian_chroot:+($debian_chroot)}\[\e[1;32m\]\u\[\e[0m\]@\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]$(__git_ps1 ' (%s)')$

, и я хотел бы повторить полученное приглашение Как получить строку, соответствующую декодированному (расширенному) PS1 ? Например, мой PS1 по умолчанию -

${debian_chroot:+($debian_chroot)}\[\e[1;32m\]\u\[\e[0m\]@\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]$(__git_ps1 ' (%s)')$

, и я хотел бы повторить полученное приглашение Как получить строку, соответствующую декодированному (расширенному) PS1 ? Например, мой PS1 по умолчанию -

${debian_chroot:+($debian_chroot)}\[\e[1;32m\]\u\[\e[0m\]@\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]$(__git_ps1 ' (%s)')$

, и я хотел бы повторить полученное приглашение username @ hostname : / path $ , желательно (но не обязательно) с приятными цветами. Беглый взгляд на руководство по Bash не дал определенного ответа, и echo -e $ PS1 оценивает только цвета.

21
задан Steven Penny 3 February 2014 в 00:07
поделиться

2 ответа

Возможно, вам придется написать небольшую программу на C, которая будет использовать тот же код, что и bash (это вызов библиотеки?), Чтобы отобразить это приглашение, и просто вызвать программу C. Конечно, это не очень переносимо, поскольку вам придется компилировать его на каждой платформе, но это возможное решение.

1
ответ дан 29 November 2019 в 20:16
поделиться

Почему бы вам просто не обработать escape-замены $ PS1 самостоятельно? Ряд замен, таких как эти:

p="${PS1//\\u/$USER}"; p="${p//\\h/$HOSTNAME}"

Между прочим, zsh имеет возможность интерпретировать escape-последовательности.

print -P '%n@%m %d'

или

p=${(%%)PS1}
9
ответ дан 29 November 2019 в 20:16
поделиться
Другие вопросы по тегам:

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