Я заметил, что если я наберу:
ls --color=auto
или же
ls --color=auto | cat
ls --color=auto > >(cat)
Я не вижу того же результата. Поэтому я предполагаю, что у программы есть способность знать, передан ли ее STDOUT к чему-либо. Вопрос в том, как это узнать?
Я проверил переменные ENV с env
и env | cat
но я получаю то же самое. Ответ где-то еще. Я не могу понять где.
Из этого вопроса я обнаружил, что я могу использовать isatty()
которые предоставляют эту функцию? это часть оболочки или ядра? Идя дальше, я вижу, что эта функция является частью стандарта POSIX.
Теперь я знаю, что у меня есть два процесса, которые могут взаимодействовать между ними с несколькими механизмами:
- STDIN/STDOUT/STDERR
- Код выхода
- Переменные среды
- Системные звонки
Bash и ls - обе программы. Таким образом, они могут использовать только перечисленные механизмы для обмена информацией.
Настоящий вопрос заключается в том, как isatty()
получает информацию из bash?