대화형 셸에서 호출할 때만 색상이 지정된 스크립트를 출력합니다.

대화형 셸에서 호출할 때만 색상이 지정된 스크립트를 출력합니다.

컬러 출력을 생성하는 bash 스크립트를 만들었습니다. 대화형 셸에서 스크립트를 호출할 때 색상이 양호합니다. 그러나 출력이 다른 스크립트에서 처리되거나 파이프를 통해 전달되는 경우 색상을 지정해서는 안 됩니다(제 생각에는).

이런 상황은 보통 어떻게 처리되나요? 컬러 출력을 켜거나 끄는 옵션을 제공해야 합니까, 아니면 스크립트에서 이를 자동으로 감지하는 방법이 있습니까? 자동으로 작동하는 것이 바람직하며 스크립트 호출에 따라 색상/무색을 출력하는 데 최소한의 코드만 필요합니다...

자동 감지의 한 가지 문제점은 스크립트가 항상 비대화형으로 실행된다는 것입니다. 따라서 상위 쉘의 대화형 상태를 알아야 합니다.

답변1

색상 출력(예: grepls)을 지원하는 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.

관련 정보