ag 출력은 파일로 파이프될 때와 터미널에서 다르게 나타납니다.

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...

여기에는 개행 문자 대신 추가 콜론이 있습니다. 어떻게 작동하나요? agSTDOUT에 쓰기만 하고 STDOUT의 실제 대상을 알지 못하는 것 같습니다 . 이 정보에 액세스할 수 없다고 생각하는 것이 잘못된 것입니까?

답변1

Google을 통해 이것을 찾았지만 내가 찾고 있던 답변을 찾지 못했습니다. 다음과 같이 ag를 호출할 수 있습니다.

ag --color --group

출력이 tty인지 여부에 관계없이 기본 색상을 사용하고 결과를 파일별로 그룹화하도록 합니다.

이것은실제 효과는 무엇인가.

답변2

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.

관련 정보