Шрифт изменения в команде эха

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

mkdir /tmp/flag.rmdirtest && rm -rf /tmp/dirtest && rmdir /tmp/flag.rmdirtest

Было бы лучше повторно спроектировать вещь так, чтобы это не было необходимо.

16
26.05.2015, 15:24
4 ответа

На большинстве, если не все эмуляторы терминала, Вы не можете установить различные размеры шрифта или различные шрифты, только цвета и несколько атрибутов (полужирный, подчеркнутый, безусловный победитель).

В ударе (или в zsh или любой другой оболочке), можно использовать терминальные escape-последовательности непосредственно (кроме нескольких экзотических, все терминалы следуют примеру xterm в эти дни). CSI ESC [, записанный $'\e[' в ударе. Escape-последовательность для изменения атрибутов CSI Ps m.

echo $'\e[32;1mbold red\e[0mplain\e[4munderlined'

Zsh имеет удобную функцию для этого.

autoload -U colors
colors
echo $bold_color$fg[red]bold red${reset_color}plain$'\e'$color[underline]munderlined
15
27.01.2020, 19:48

Вы могли включать эти определения цветов в сценарий или исходный файл. Мог выглядеть примерно так.

#!/bin/bash
PATH=/bin:/usr/bin:

NONE='\033[00m'
RED='\033[01;31m'
GREEN='\033[01;32m'
YELLOW='\033[01;33m'
PURPLE='\033[01;35m'
CYAN='\033[01;36m'
WHITE='\033[01;37m'
BOLD='\033[1m'
UNDERLINE='\033[4m'

echo -e "This text is ${RED}red${NONE} and ${GREEN}green${NONE} and ${BOLD}bold${NONE} and ${UNDERLINE}underlined${NONE}."

tput sgr0

Заметьте, что необходимо сбросить цветовые коды ANSI после каждого экземпляра, Вы вызываете изменение. tput sgr0 сброс все изменения Вы сделали в терминале.

Я верю изменению размера шрифта, или курсив был бы характерен для терминала, который Вы используете.

В то время как это руководство характерно для настройки Вашей подсказки удара, это - хорошая ссылка для цветовых кодов и генерирует некоторые идеи того, что можно сделать.

16
27.01.2020, 19:48

Кажется, как будто расположение не может обработать [0x1b]- символ перед [.

Первая строка осмеливается:

 echo -e "\x1b[1m bold"
     echo -e "\x1b[30m black"
     echo -e "\x1b[31m red"
     echo -e "\x1b[32m green"
     echo -e "\x1b[33m yellow"
     echo -e "\x1b[34m blue"
     echo -e "\x1b[35m mag"
     echo -e "\x1b[36m cyan"
     echo -e "\x1b[37m white"   

Для общего типа я только знаю

echo -e "\x1b[0m io-std"
echo -e "\x1b[1m bold"
echo -e "\x1b[2m normal"

и из комментариев, manatwork спасибо и GypsyCosmonaut:

echo -e "\x1b[3m italic"
echo -e "\x1b[4m underlined"
echo -e "\x1b[5m blinking"
echo -e "\x1b[7m inverted"

и не знайте различие между io-std и нормальный.

Я не видел курсив или маленький в оболочке.

Можно ввести их (благодаря manatwork также) Ctrl + v ESC в Bash, где он будет отображен как ^[. Это означает, что целая последовательность ANSI будет похожа ^[[1m bold или ^[[1mbold (для предотвращения пробела прежде 'полужирный').

У многих редакторов есть проблемы с (символом) 0x1b. Альтернативы: скопировать/вставить это от где-нибудь, или использование

echo -e "\x1b[1m bold"

в ударе или Hex-редакторе.

5
27.01.2020, 19:48
  • 1
    могут быть введены: Ctrl+V, Esc. (Будет отображен как “^ [”. Это означает, что целая последовательность ANSI будет похожа “^ [[1mbold”.) –  manatwork 25.04.2012, 14:49
  • 2
    Существует больше атрибутов для упоминания: \e[4m подчеркнутый, \e[5m мигание, \e[7m инвертированный. –  manatwork 25.04.2012, 14:52
  • 3
    @manatwork: добавленный их. –  user unknown 25.04.2012, 15:04
  • 4
    @userunknown спасибо за помощь, переделывая Ваш код, я нашел, что курсив echo -e "\x1b[3m italic" –  GypsyCosmonaut 16.07.2017, 14:13

Здесь:

http://en.wikipedia.org/wiki/ANSI_escape_code

(примечание: многие из них обычно не работают, но большинство из них помечены таким образом.)

Я делаю игру в терминале и сильно полагаюсь на приведенную выше ссылку. Она даже подсказывает, как скрыть/открыть курсор, сделать цвет (30's), "жирный" (более светлый), темный, подчеркнутый, курсив, цвет фона (40's вместо 30's) и т.д.. Также можно изменить положение курсора (что очень удобно - например, "\x1B[1A" перемещает курсор на одну строку вверх; "\x1B[0;0H" перемещает курсор в строку 0, цвет 0; "\x1B[2J" очищает экран; "\x1B[2K" очищает строку.

Для ваших целей, как сказали:

echo -e "\x1b[30;44m black with blue background \x1b[m"

echo -e "\x1b[31;42m red with green background \x1b[m"

echo -e "\x1b[32;40m green with black background \x1b[m"

echo -e "\x1b[8m Invisible; na na na na boo boo \x1b[m"

Примечание: Вам нужно -e в

echo **-e** "\x1b[35;1m Light purple \x1b[m"

или вы должны использовать одинарные кавычки. Введите man echo, чтобы понять почему (двойные кавычки обычно заноза при печати; когда мне нужны вещи, которые не расширяются или мне нужны ANSI экранирующие последовательности, я использую одинарные кавычки, потому что это легко - даже если я привык делать это так много раз - забыть -e и в этом случае вы получите "коробку с цифрами и буквами[35;1m").

Каждый раз, когда Вы видите CSI, замените его на "\x1b[" (или "\e[" или "\u1b["). "\x1b[" Я думаю, что это более стандартно, но на самом деле я не знаю, в чем разница между ними.

0
27.01.2020, 19:48

Теги

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