![--color=를 사용할 때 grep이 리디렉션되는 위치를 어떻게 "알 수 있습니까?" [복사]](https://linux55.com/image/108780/--color%3D%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EB%95%8C%20grep%EC%9D%B4%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98%EB%90%98%EB%8A%94%20%EC%9C%84%EC%B9%98%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%22%EC%95%8C%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%22%20%5B%EB%B3%B5%EC%82%AC%5D.png)
sudo echo hello > root-owned-file.txt
리디렉션은 루트 권한을 상속하지 않기 때문에 이것이 작동하지 않는다는 것을 배웠습니다 . echo hello | sudo tee root-owned-file.txt
따라서 또는 echo hello | sudo cp /dev/stdin root-owned-file.txt
. 그러나 --color=tty
grep은 tty로 리디렉션할 때 색상을 추가할 수 있지만 다른 대상으로는 그렇지 않습니다. 리디렉션은 대상 프로세스와 완전히 별개인가요? 그렇다면 grep은 색상이 생략된 경우를 어떻게 "알"까요?
내 직감으로는 리디렉션이 채널 1/2/3 그 이상이라는 것입니다. 내 현재 이론은 grep이 여러 변형의 색상 및 일반 출력을 채널 1로 보내고 상위 쉘이 대상이 tty와 연결되어 있는지 여부에 따라 대상으로 리디렉션할 올바른 변형을 선택한다는 것입니다. 또는 상위 셸이 대상 프로세스/파일을 준비하고 일종의 신호 또는 파일 설명자를 소스 프로세스에 보낼 수 있지만 이는 파이프의 순차적 특성에 영향을 미칠 수 있으며 이는 더 엄격하다고 생각합니다. 예를 들어, 파이프라인의 다음 명령은 파일 설명자가 생성되기 전에 플래그를 설정할 수 있으며 소스 명령은 해당 플래그의 원래 값에 따라 달라질 수 있으므로 파이프라인 순서가 엄격하지 않으면 경쟁 조건이 발생할 수 있습니다.
답변1
grep
그냥 사용isatty(3)
표준 출력이 tty인지 확인합니다. 그렇다면 해당 색상이 사용되며( tty
또는 사용 auto
), 그렇지 않으면 사용되지 않습니다.