Когда я запускаю команду ag
для поиска текстовых файлов, я получаю вывод, который выглядит так в командной строке (полные результаты не показаны):
❯ ag dependency 140317155505.md 27:The Bundler dependencies API ... 140423193022_python_packages.md 61:`distutils` is part of the Python standard ....
На выходе есть новые строки. Однако, когда я подключаюсь или перенаправляюсь к файлу, я получаю вывод следующим образом:
140317155505.md:27:The Bundler dependencies API... 140423193022_python_packages.md:61:`distutils` is part of the Python standard...
Здесь есть дополнительный двоеточие вместо новой строки. Как это работает? Я бы подумал, что ag
просто пишет STDOUT и не знает о фактической цели STDOUT. Я ошибаюсь, думая, что у него нет доступа к этой информации?
Программа ag
(я не знаком с ней), мог бы использовать системный вызов
stdout_is_tty = isatty(1);
Функция isatty () проверяет, является ли fd открытым файловым дескриптором, относящимся к терминалу.
Это позволяет изменять выход в зависимости от того, где он пишет.
Я также думаю, что нашел соответствующий раздел исходного кода
/* If we're not outputting to a terminal. change output to: * turn off colors * print filenames on every line */ if (!isatty(fileno(stdout))) { opts.color = 0; group = 0; ....
См. Также man isatty
.
Я пришел сюда Google и не нашел ответа, который я искал: вы можете вызвать ag как
ag --color --group
чтобы заставить его использовать цвета по умолчанию и результаты группы по файлу, независимо от того, является ли вывод tty.
Вот как это выглядит в действии .