Удивительные символы и символы в приглашении bash

81

Я только что наткнулся на скриншот чьего-то терминала:

Снимок экрана сеанса с приглашением, отмеченным звездочкой и стрелкой

Есть ли список всех символов, которые можно использовать в приглашении Bash, или кто-то может получить мне символ для звезды и стрелки вправо?

Нафтули Кей
источник

Ответы:

104

Вы можете использовать любой печатный символ, bash не против. Возможно, вы захотите настроить свой терминал для поддержки Unicode (в форме UTF-8 ).

В Юникоде много символов, поэтому вот несколько советов, которые помогут вам искать в диаграммах Юникода:

  • Вы можете попробовать нарисовать персонажа на Shapecatcher . Он пытается распознать символ Юникода в том, что вы рисуете.
  • Вы можете попытаться выяснить, в каком блоке находится персонаж. Например, этот странно выглядящий символ и эта звезда будут в блоке разных символов; символы как Ǫи ıлатинские буквы с модификаторами; это математический символ и так далее.
  • Вы можете попытаться придумать слово в описании символа и найти его в списке имен и описаний символов Юникода. Gucharmap или Kcharselect может помочь.

PS На Shapecatcher я получил U + 2234 ПОТОМУ для , U + 2192 СТРЕЛКА ВПРАВО для , U + 263F MERCURY для и U + 2605 BLACK STAR для .

В bash-скрипте, вплоть до bash 4.1, вы можете написать байт по его кодовой точке, но не по символу. Если вы не хотите, чтобы символы не ASCII делали вашу систему .bashrcустойчивой к изменениям кодировки файлов, вам необходимо ввести байты, соответствующие этим символам, в кодировку UTF-8. Вы можете увидеть шестнадцатеричные значения, запустив echo ∴ → ☿ ★ | hexdump -Cтерминал UTF-8, например , закодированный \xe2\x88\xb4в UTF-8.

if [[ $LC_CTYPE =~ '\.[Uu][Tt][Ff]-?8' ]]; then
  PS1=$'\\[\e[31m\\]\xe2\x88\xb4\\[\e[0m\\]\n\xe2\x86\x92 \xe2\x98\xbf \\~ \\[\e[31m\\]\xe2\x98\x85 $? \\[\e[0m\\]'
fi

Начиная с bash 4.2, вы можете использовать \uпосле 4 шестнадцатеричные цифры в $'…'строке.

  PS1=$'\\[\e[31m\\]\u2234\\[\e[0m\\]\n\u2192 \u263f \\~ \\[\e[31m\\]\u2605 $? \\[\e[0m\\]'
жилль
источник
Хм. Когда я бегу echo ★ | hexdump -C1, я получаю: hexdump: invalid option -- '1'. Будет ли все еще работать без 1 в вызове?
Нафтули Кей
2
@TKKocheran Это 1была опечатка, просто hexdump -C(или, если hdкоротко, в некоторых системах).
Жиль
Кроме того, вы могли бы сделать: PS1=$'\u2234\u2192\u263f\u2605'чувствует себя легче поддерживать :-)
мат
1
Shapecatcher потрясающий! спасибо за указание на это
Siamore
1
@FaithReaper \uNNNNСинтаксис - это функция $'…'цитирования, а не быстрое расширение. Значение PS1должно содержать символ Unicode. $'\u1234'способ поместить символ Unicode в строку
Жиль
12

Вы можете найти символы Unicode на многих сайтах, таких как этот: http://panmental.de/symbols/info.htm

Вам просто нужно убедиться, что ваш термин поддерживает UTF-8 .

jasonwryan
источник
Как бы мне избежать одного из этих персонажей? Т.е.\u27A4
Нафтули Кей
2
См. Ответ Жиля, или вот что: stackoverflow.com/questions/602912/…
jasonwryan
Вы можете увидеть все 65000+ точек Unicode на utf8-chartable.de (В контексте значений кодовых точек «utf8» является синонимом «Unicode».)
goldilocks