Intereting Posts
, (точка) в режиме файла разрешение pure-ftpd запрещено на внешнем USB-накопителе Как заблокировать доступ к «частной» сети только для хоста из интерфейса VirtualBox nat (отдельные сети только для хоста)? Что вызывает задержку нажатий клавиш в приложении терминала OSX? Eglibc не может скомпилировать суффикс объектных файлов при попытке перекрестного компиляции Объединение определенных строк текста перед их модификацией Удивительный менеджер окон перестает распознавать ярлыки избавиться от сообщения «Нет режима кэширования страницы» во время загрузки Команда Scrot – как сохранить только миниатюру Ошибка сценария сценария Openbox в трубке присоединиться к sed output Окно GTK gtkdialog для создания ссылки OpenVPN, похоже, не очищает таблицу маршрутов при нарушении туннеля VPN ssh-туннелирование: соединение закрыто иностранным хостом Является ли историческое поведение команды Unix V5 tr дополнением set2 отличным от того, что мы считаем сегодня «классическим» поведением System V (1983-1988)?

ag выводится в терминале иначе, чем при подключении к файлу

Когда я запускаю команду 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.

Вот как это выглядит в действии .