2

Как я могу иметь "относительный" цвет в bash, а не в жестко закодированном? Если я укажу использовать желтый "\033 [93m", то это выглядит плохо для тех людей, которые используют белый фон.

Есть ли способ указать не цвет, а, так сказать, "стиль"? как "Выделить" или "Важно" или "затемнить" или "Устаревший"?

2 ответа2

1

Баш не имеет к этому никакого отношения. Страница руководства bash(1) содержит упоминаний о цвете.

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

К сожалению, цветовые коды ANSI датируются тем, что терминалы, видеокарты и мониторы ПК могли отображать только 8 или 16 цветов (если таковые имеются), поэтому вы не можете использовать цветовые коды ANSI для того, что вы пытаетесь сделать.

Таким образом, если не строить всю инфраструктуру самостоятельно (эмуляторы терминалов, которые могут создавать относительные цвета, новая система кодов побега цвета для передачи относительных цветов на ваши эмуляторы, и, возможно, связанная с ними terminfo/termcap и другая инфраструктура программного обеспечения, связанная с терминалами, работают над тем, чтобы уверен, что скрипты могут надежно распознавать, что пользователь использует эмулятор терминала, который знает эти новые цветовые трюки), и заставлять пользователей использовать его, вам, вероятно, придется обойтись без него.

0

Нашел эту очень подробную страницу о интерпретируемых стилях и цветах общими терминалами. Для первоначального вопроса, на акцент, есть несколько хитростей, которые можно сделать. Просто имейте в виду, что это может работать не на всех терминалах, как указал Spiff, это зависит от терминала, чтобы интерпретировать escape-последовательность. С этой страницы:

echo -e "Normal \e[1mBold"

echo -e "Normal \e[2mDim"

На моем терминале я также попытался \e[9 что привело к зачеркнутому тексту.

Использование таких стилей лучше, чем использование цветов, потому что вы никогда не получите невидимую комбинацию, если не будете намеренно использовать \e[8 . Если терминал игнорирует какой-либо стиль, вы просто увидите простой текст.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .