![대화형 셸에서 호출할 때만 색상이 지정된 스크립트를 출력합니다.](https://linux55.com/image/48704/%EB%8C%80%ED%99%94%ED%98%95%20%EC%85%B8%EC%97%90%EC%84%9C%20%ED%98%B8%EC%B6%9C%ED%95%A0%20%EB%95%8C%EB%A7%8C%20%EC%83%89%EC%83%81%EC%9D%B4%20%EC%A7%80%EC%A0%95%EB%90%9C%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4..png)
컬러 출력을 생성하는 bash 스크립트를 만들었습니다. 대화형 셸에서 스크립트를 호출할 때 색상이 양호합니다. 그러나 출력이 다른 스크립트에서 처리되거나 파이프를 통해 전달되는 경우 색상을 지정해서는 안 됩니다(제 생각에는).
이런 상황은 보통 어떻게 처리되나요? 컬러 출력을 켜거나 끄는 옵션을 제공해야 합니까, 아니면 스크립트에서 이를 자동으로 감지하는 방법이 있습니까? 자동으로 작동하는 것이 바람직하며 스크립트 호출에 따라 색상/무색을 출력하는 데 최소한의 코드만 필요합니다...
자동 감지의 한 가지 문제점은 스크립트가 항상 비대화형으로 실행된다는 것입니다. 따라서 상위 쉘의 대화형 상태를 알아야 합니다.
답변1
색상 출력(예: grep
및 ls
)을 지원하는 UNIX 응용 프로그램에는 일반적으로 명령줄 옵션이 있으며 자동 감지도 가능합니다.
man ls
우리 좀 봐 봐
--color[=WHEN]
colorize the output. WHEN defaults to `always' or can be `never' or `auto'. More info below
auto
따라서 기본적으로 ls는 항상 색상을 사용하므로 이 옵션 에 유의하세요 .
man grep
다음과 같은 것을 보여주세요
--color[=WHEN], --colour[=WHEN]
<snipped> WHEN is never, always, or auto.
해당 옵션이 활성화된 경우 auto
(애플리케이션의 기본값일 수 있음) 다음과 같은 답변을 찾을 수 있습니다(Giles가 제안함).https://unix.stackexchange.com/a/10065/4635
즉, 출력이 터미널로 이루어지고 색상을 지원하며 사용자가 이를 비활성화하지 않은 경우 색상을 사용해야 합니다. 물론 사용자는 이 검사를 사용 always
하거나 never
건너뜁니다.
프로그램이 --color=always
자동 감지를 지원하더라도 "내가 더 잘 알 때" 색상을 강제로 사용할 수 있다는 의미이므로 유용하다고 생각합니다(대상이 터미널이 아니지만 색상을 지원한다는 것을 알고 있다고 가정). . 일부 시스템 ls
에서는 별칭이 ls --color=always
.