티로 배관하는 동안 색상 유지


답변:


83

unbuffer실제로 다른 실행 파일로 파이프하는 경우에도 명령 앞에 삽입 하기 만하면 대화식 출력에 쓰고 있다고 생각할 수 있습니다. 의 경우 색상이 유지됩니다 ls.

예를 들어

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

아직 설치하지 않은 경우 Ubuntu 및 기타 데비안 Linux 배포판에서 설치 unbuffer하여 설치할 수 있습니다 .

sudo apt-get install expect-dev

6
아무것도 설치하지 않아도되는 다른 솔루션은 stackoverflow.com/questions/3515208/…
Tgr

3
결과 파일에 색상 코드가 포함됩니다 (물론). 색상 코드를 사용하고 터미널에 색상을 올바르게 표시하는 방식으로 파일 을 인쇄 하는 방법이 있습니까?
Kyle Strand

2
비밀번호 입력시 비밀번호가 일반 텍스트로 표시됩니다.
AndiDog

@Tgr이 솔루션은 OS X에서 원시 색상 출력을 얻으려고 노력하지 않았습니다. xcodebuild대신 색상이없는 잘린 선이 생겼 습니다. unbuffer xcodebuild | less -R그러나 완벽하게 작동했습니다.
슬립 D. 톰슨

2
expect-dev패키지 가 필요하지 않습니다 . expect충분하다.
Yajo

11

ls 옵션 사용 --color=always

--color=auto 명백한 이유로 파이프 라인에 출력을 색상으로 표시하지 않습니다.

메인 페이지는 다음과 같이 말합니다.

--color = auto를 사용하면 표준 출력이 터미널 (tty)에 연결된 경우에만 색상 코드가 출력됩니다.


2
승인. 그것은 그것을 설명합니다. 그러나 여전히 화면의 색상을 어떻게 볼 수 있습니까? (결국 TTY입니다). 로그 파일에 포함하지 않아도 괜찮지 만 반드시 내 화면에 표시하고 싶습니다.
Paweł Gościcki

나는 내가 충분히 명확하지 않다고 생각한다. ls -l단지 예일뿐입니다. 에 파이프 할 때 색상을 제거하는 완전히 다른 명령 (heroku logs)이 tee있습니다. 그리고 나는 실행중인 명령이 아닌 티 / 파이프를 "수정 / 변경"하고 싶습니다.
Paweł Gościcki

1
@Pawel, 티 / 파이프가 이러한 색상 코드를 제거하지 않기 때문에 티 / 파이프에서 쉽게 수정할 수 없습니다. 문제는 초기 명령이 터미널에 쓰지 않는 것입니다. 파이프처럼 작동하지만 명령은 터미널로 간주되는 의사 터미널 이 필요합니다 .
RedGrittyBrick

흠 ... 충분히 공정하다. 나는 그것이 어떻게 그런지 받아 들일 필요가 있다고 생각합니다.
Paweł Gościcki

3
@ PawełGościcki이 답변은의 문제 만 해결합니다 ls. heroku 로그를 포함한 모든 프로그램의 문제를 해결하는 내 답변을 참조하십시오.
Eamonn O'Brien-Strain

3

script허용 된 답변의 의견에 제공된 솔루션을 확장하겠습니다 . 사용 script이 불가능하거나 설치하지 않을 경우에 유용 할 수 있습니다 기대 포함 패키지 unbuffer명령을 사용합니다.

색상 코드를 사용하여ls 출력을 표준 출력 및 파일 인쇄 하십시오 .

script -efq output.log -c "ls -l --color=auto"

여기서 ( man script) :

  -e, --return
         Return the exit code of the child process.  Uses the same
         format as bash termination on signal termination exit code is 128+n.
  -f, --flush
         Flush output after each write.  This is nice for telecooperation:
        one person does `mkfifo foo; script -f foo', and another can 
        supervise real-time what is being done using `cat foo'.
  -q, --quiet
         Be quiet (do not write start and done messages to either 
         standard output or the typescript file).

보기 색상 출력 파일을 :

less -r output.log

2
-e과 동일하다 --return- 둘 필요가 없습니다; -efq입니다 --return --flush --quiet.
Noel Maersk

@NoelMaersk 감사합니다. 나는 매개 변수 설명을 답변에 포함시켰다.
Juuso Ohtonen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.