stdin/stderr 리디렉션, 파이프 및 색상

stdin/stderr 리디렉션, 파이프 및 색상

나는 이 질문에 대해 수많은 순열을 보았지만 그 중 어떤 것도 정확히 중복된 것은 아니라고 생각합니다.

유지하면서 stderr(또는 결국 stderr 및 stdin)만 파일에 복사할 수 있습니다.화려한화면에 출력 (파일에도 컬러가 있으면 더 좋을 것 같습니다)

답변1

각 명령에는 다른 답변에 표시된 것처럼 항상 색상 이스케이프 코드를 보내는 특수 명령이 있을 수 있습니다. 그러나 보다 일반적인 접근 방식은 다음 도구를 사용하는 것입니다.

버퍼링 해제

unbuffer ls -l --color=auto | tee output.log

unbuffer의 명령입니다예상되는팩.

참조번호슈퍼유저 - 티셔츠에 파이핑할 때 색상 유지

스크립트

script --flush --quiet --command "ls -l --color=auto" | tee output.log

script의 명령입니다유틸리티Linux팩.

참조번호StackOverflow - 쉘 리디렉션을 통해 컬러 출력을 캡처할 수 있습니까? [복사]

답변2

파이핑이나 리디렉션으로 색상이 제거되지 않습니다!


사용하는 초기 명령에서 출력이 터미널이 아니라는 것을 확인하면 색상이 제거됩니다! 따라서 이 질문에 대한 일반적인 답변으로 사용할 수 없습니다.

예를 들면 다음을 참조하세요 man ls.

ls색상 코드는 표준 출력이 터미널에 연결된 경우에만 표시됩니다.

를 사용하여 동작을 변경할 수 있습니다 --color=always.

또한 적용됩니다 grep:

   --color[=WHEN], --colour[=WHEN]
          Surround  the  matched (non-empty) strings, matching lines, context lines, file names, line numbers, byte offsets, and separators (for fields
          and groups of context lines) with escape sequences to display them in color on the terminal.  The  colors  are  defined  by  the  environment
          variable  GREP_COLORS.   The  deprecated environment variable GREP_COLOR is still supported, but its setting does not have priority.  WHEN is
          never, always, or auto.

예를 들어:

echo 123 | grep --color=always 2 | tee file

... 2터미널과 파일의 출력에 색상을 제공합니다.

출력에는 색상이 포함되지만아니요파일에서 다음 질문에 대한 답변을 확인할 수 있습니다.이 문제그런 다음 예를 들어 다음을 실행합니다.

echo 123 | grep --color=always 2 | tee /dev/tty | ansi2txt > file

관련 정보