Как сделать специальные символы в скрипте Bash для conky? - PullRequest
7 голосов
/ 01 декабря 2011

Интересно, как сделать символ Цельсия в моем скрипте bash, чтобы я мог исправить вывод в строке «CPU temp: 50 C»? Каковы escape-последовательности для специальных символов этого типа, если мой шрифт их поддерживает?

Все еще чешу голову ...

Чтобы быть более точным, мне нужно использовать его в conky Я использую эту строку: awk '{printf ($ 3 "C")}'. Как мне исправить это так, чтобы он выводил градусы Цельсия? Потому что, если я вставлю символ directly напрямую, закрутите его винтами.

Ответы [ 3 ]

12 голосов
/ 01 декабря 2011

Все неконтролируемые последовательности байтов, которые выводит ваш скрипт на терминал, интерпретируются для отображения в соответствии с настройками терминала. Если вы сконфигурируете его для интерпретации входящих данных как utf-8 , то все, что вам нужно сделать в скрипте bash, это вывести символ Цельсия в соответствии с utf-8 .

Правильная настройка терминала зависит от используемого вами приложения. Вполне вероятно, что он уже находится в режиме utf-8.

Чтобы отобразить нужный вам символ, вам нужно найти его кодовую точку Unicode и закодировать его в utf-8, или вы можете найти его где-нибудь, где уже показана последовательность utf-8 символа. Символ Цельсия описан здесь например.

Последовательность по Цельсию utf-8 равна 0xE2 0x84 0x83, поэтому вы можете отобразить ее в своей оболочке с помощью конструкции $'string', поскольку она принимает escape-код \xhh:

$ echo $'\xe2\x84\x83'
℃

или эхо с -e:

$ echo -e '\xe2\x84\x83'
℃

Кроме того, вы можете присвоить его переменной

$ CEL=$'\xe2\x84\x83'
$ echo $CEL
℃

Если вы хотите отобразить ℃ в виде двух отдельных символов: символа степени и буквы C, тогда вы можете использовать этот символ и эту команду:

$ echo $'\xc2\xb0'C
°C

Если вы используете оболочку, которая не поддерживает конструкцию $'string', вы также можете использовать такие утилиты, как perl или python:

$ python -c 'print "\xe2\x84\x83"'
℃
$ perl -e 'print "\xe2\x84\x83\n"'
℃

В GNU awk вы можете использовать стандартные экранирования языка C, включая \xhh, например:

$ awk 'BEGIN { print "\xe2\x84\x83"; }' 
℃
$ awk 'BEGIN { print "\xc2\xb0\C"; }' 
°C

Обратите внимание, что для завершения шестнадцатеричного числа потребовалась дополнительная обратная косая черта (без нее escape-последовательность потребляет все шестнадцатеричные цифры, включая букву C, см. Руководство пользователя GNU awk ).

Более переносимым решением в awk является использование восьмеричной последовательности. Поскольку шестнадцатеричный 0xC2 является восьмеричным 302, а шестнадцатеричный 0xB0 - восьмеричным 260, вы можете сделать следующее:

$ awk 'BEGIN { print "\302\260C"; }'
°C

Аналогично, * 1 046 *

$ awk 'BEGIN { print "\342\204\203"; }'
℃
0 голосов
/ 01 декабря 2011

Вы можете попробовать это:

echo -e "CPU temp: 50\xE2\x84\x83"

Похожие: Как вы отображаете 4-значный Unicode-символ в Bash?

0 голосов
/ 01 декабря 2011

Насколько я знаю, для ° нет последовательности выхода.

...