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
), 그렇지 않으면 사용되지 않습니다.