Дивовижні символи та символи в баш-підказці


81

Я щойно наткнувся на скріншот чийогось терміналу:

Скріншот сеансу із відображенням підказки зірочкою та стрілкою

Чи є список усіх персонажів, які можна використовувати в підказці Bash, чи хтось може отримати мені персонажа для зірки та стрілки праворуч?

Відповіді:


104

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

У Unicode символів дуже багато, тому ось кілька порад, які допоможуть вам шукати за допомогою діаграм Unicode:

  • Можна спробувати намалювати персонажа на Shapecatcher . Він намагається розпізнати символ Unicode у тому, що ви малюєте.
  • Ви можете спробувати розібратися, в якому блоці знаходиться персонаж. Наприклад, цей дивний на вигляд символ і ця зірка опиниться в блоці різних символів; символи, як Ǫі ıє латинськими літерами з модифікаторами; є математичним символом тощо.
  • Ви можете спробувати придумати слово в описі символу та шукати його у списку імен та описів символів Unicode. Gucharmap або Kcharselect можуть допомогти.

PS На Shapecatcher я отримав U + 2234 ТЕХНІЧ для , U + 2192 СТРЕЛКА ПРАВИЛЬНИХ для , U + 263F МЕРКУР для та U + 2605 ЧОРНИЙ ЗІР для .

У скрипті 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чотири шістнадцяткових цифр у $'…'рядку.

  PS1=$'\\[\e[31m\\]\u2234\\[\e[0m\\]\n\u2192 \u263f \\~ \\[\e[31m\\]\u2605 $? \\[\e[0m\\]'

Хм. Коли я біжу echo ★ | hexdump -C1, я отримую: hexdump: invalid option -- '1'. Чи все одно він буде працювати без 1 у виклику?
Naftuli Kay

2
@TKKocheran Це 1була помилка, це просто hexdump -C(або hdкоротко, у деяких системах).
Жиль

Крім того, ви могли б зробити: PS1=$'\u2234\u2192\u263f\u2605'відчуває себе легше підтримувати :-)
мат

1
Shapecatcher - приголомшливий! дякую, що
вказали на

1
@FaithReaper \uNNNNСинтаксис - це особливість $'…'цитування, а не швидкого розширення. Значення PS1must містить символ Unicode. $'\u1234'це спосіб ввести символ Unicode в рядок.
Жиль

12

Ви можете знайти символи Unicode на багатьох сайтах, як цей: http://panmental.de/symbols/info.htm

Ви просто повинні переконатися, що ваш термін підтримує UTF-8 .


Як я б уникнув одного з цих персонажів? Тобто\u27A4
Naftuli Kay

2
Див @Gilles відповідь, або це: stackoverflow.com/questions/602912 / ...
jasonwryan

Ви можете побачити всі 65000+ точок унікоду на utf8-chartable.de (У контексті значень кодової точки "utf8" є синонімом "unicode".)
goldilocks

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.