Непечатные символы отображаются в терминале
Без цвета моя подсказка выглядит так:
[0] [dimo414@dimo414:/tmp]
$ echo $PS1 | sed 's/\x1b/\\e/g'
\n[0] [dimo414@dimo414:/tmp]\n\$
Я добавляю немного цвета и \[
... \]
разграничить это:
[0] [dimo414@dimo414:/tmp]
$ echo $PS1 | sed 's/\x1b/\\e/g'
\n[\[\e[32m\]0\[\e[0m\]] [\[\e[34m\]dimo414\[\e[0m\]\[\e[32m\]@dimo414\[\e[0m\]:\[\e[94m\]/tmp\[\e[0m\]]\n\$
Выглядит отлично! Но BashFAQ указывает, что:
\[ \] Являются особыми, только когда вы назначаете PS1, если вы печатаете их внутри функции, которая запускается, когда отображается подсказка, она не работает. В этом случае вам нужно использовать байты \001 и \002
Однако, когда я меняю подсказку для использования \001
а также \002
вместо этого я получаю это (StackExchange, кажется, правильно отображает их как символы нулевой ширины, но они есть):
[0] [dimo414@dimo414:/tmp]
$ echo $PS1 | sed 's/\x1b/\\e/g'
\n[\e[32m0\e[0m] [\e[34mdimo414\e[0m\e[32m@dimo414\e[0m:\e[94m/tmp\e[0m]\n\$
Эта же подсказка - с \001
... \002
выглядит правильно в iTerm2 на OSX.
Я использую эти две команды, чтобы избежать цветовых последовательностей:
# Previously (works)
printf '\[%s\]' "$(color "$@")"
# Currently (doesn't work on Ubuntu)
printf '\001%s\002' "$(color "$@")"
Что я должен делать вместо второго варианта, чтобы использовать \001
... \002
на Ubuntu?