LINUX.ORG.RU

Вопрос о цветах и терминале. (На самом деле я плохо владею терминологией, поэтому этот заголовок заведомо некорректен)

 


1

1
1.

Есть команда на баше:

$ tree

Если я выполню эту команду в своём терминале - я увижу цвета.

Есть другая команда на баше:

$ tree | cat

Если я выполню эту команду в своём терминале - я не увижу цвета.

У меня есть догадки что это как-то связано c переменными окружения.

Хотелось бы услышать наиболее «глубинный» ответ (хотя бы в виде ссылок, но желательно с пояснениями). Ещё прошу поправить терминологию в моём сообщении.

2.

Вот ещё строчка из $ man ls.1:

ls emits color codes only when standard output is connected to a  terminal.

Пожалуйста, разъясните мне её.


Пожалуйста, разъясните мне её.

Вызывается функция isatty(1). Если она возвращает 1, то вывод будет раскрашенным, если 0, то нет.

akk ★★★★★
()

У программ есть стандартные потоки ввода-вывода (stdin, stdout, stderr). Каждый поток должен быть с чем-то связан или закрыт. По-умолчанию, первый читает из терминала, а два вторых пишут в него. | перенаправляет либо stdin, либо stdout, связывая их с другим процессом. Система позволяет определить, терминал ли на конце потока через вызов istty(). Программы используют эту информацию, чтобы определить, когда следует раскрашивать вывод (цвета являются частью вывода и могут быть нежелательны для обработки вывода команд).

У меня есть догадки что это как-то связано c переменными окружения.

Это не так.

Ещё прошу поправить терминологию в моём сообщении.

С ней всё в порядке. Можно добавить, что цвета реализуются через escape-последовательности, как и другое взаимодействие с терминалом.

xaizek ★★★★★
()
Ответ на: комментарий от akk

Вызывается функция isatty(1)

На всякий случай, в bash это ключ -t внутри [[ ]]

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.