유닉스 명령 "시계"가있는 색상?


답변:


145

watch이제 일부 최신 버전은 색상을 지원합니다.

예를 들면 watch --color ls -ahl --color.

관련 .


3
다음을보십시오 : superuser.com/questions/125469/… (첫 번째 답변)-아마도 당신의 답변에 링크 할 수 있습니다.
aatdark

11
watch와 함께 사용하기 위해 여기에 왔습니다 git diff. FWIW, 즉 당신이 통과해야 일을 얻을 --color=alwaysgit diff(예를 들면 watch --color git diff --color=always.
theabraham

31

사용하지 마십시오 watch... 시계 프로그램을 사용하면 터미널에 쓰고 있지 않음을 감지하고 색상을 제거 할 수 있습니다. 제어 코드를 유지하려면 특정 프로그램 플래그를 사용해야합니다.

깃발을 모르거나없는 경우 다음과 같이 가난한 사람을 감시 할 수 있습니다.

while sleep <time>; do clear; <command>; done

약간의 깜빡임 (시계가 "이중 버퍼링"으로 작동 함)이 있지만 어떤 경우에는 충분히 유용합니다.

이중 버퍼링 된 가난한 사람의 시계를 만드는 유혹을받을 수 있습니다.

while sleep <time>; do <command> > /tmp/file; clear; cat /tmp/file; done

그러나 "나는 터미널에 쓰고 있지 않습니다"기능을 다시 누르게됩니다.


아마 사용하는 while sleep <time>; do clear; <command> | tee /tmp/file; done대신에 >cat?
André Leria

mmm 나는 그것을 @ AndréLeria ... | 티는 watchdo 처럼 색상 코드를 제거 하고 명령이 깜박이는 것을 방지하지 않습니다
theist

두 번째 예에 대한 제안이며 나에게 색상도 제공하지 않습니다. 아니면 내가 뭔가 잘못하고있는 것일까 요?
André Leria

1
@ AndréLeria 두 번째 "예제"는 잘못된 예입니다 (라스 라인에서 말한대로). 요점은 일단 파이프를 치면 터미널에 쓰지 않기 때문에 색상 코드를 잃어버린다는 것입니다. 버퍼링 된 작업을 위해 파이프를 사용하여 clear와 target 명령 실행 사이의 시간 경과로 인한 플리커를 보상하려고 시도하는 것이 얼마나 잘못된 것인지 보여주기 위해 있습니다watch
theist

4
bash에서 : while sleep <time> ; do x="$( <command> 2>&1 )" ; clear ; echo "$x" ; done-셸 내장 기능 만 사용하여 화면을 지우고 출력을 표시하므로 깜박임이 가장 적은 대안입니다.
Géza Török

18

watch몇 줄의 셸 스크립트에서 의 기본적이고 불필요한 작업을 복제 할 수 있습니다 .

$ cat cheapwatch 
#!/bin/sh

# Not quite your Rolex

while true ; do
  clear
  printf "[%s] Output of %s:\n" "$(date)" "$*"
  # "$@" <- we don't want to do it this way, just this:
  ${SHELL-/bin/sh} -c "$*"
  sleep 1  # genuine Quartz movement
done

$ ./cheapwatch ls --color  # no problem

결국, 매우 영리한 사람 tr이이 스크립트에 명령을 해킹하여 제어 문자를 제거하고 사용자가 --color해당 논리를 비활성화 하도록 강제합니다 . 당분간이 구현의 순진함은 색을 먹는 괴물을 멀리하는 것입니다.

옵션 watch이없고 --color어떤 이유로 든 패키지를 업그레이드 할 수없는 상황에 처해 있다면 이것을 던져도됩니다.


8

시계는 컬러 출력으로 작동합니다. 그것은 procps의 패키지 여기 (데비안에서 적어도) 귀하의 질문에 대한 버그 보고서됩니다의 일부입니다 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=129334 그들이 대답 어디에 당신이 procps의를 업데이트해야, 꾸러미

예를 들어 우분투 11.04에서이 패키지는 http://packages.debian.org/wheezy/procps에서 작동합니다 .

tl; dr

procps 업데이트


8

다른 답변이이 문제를 해결하지만이를 수행하는 가장 쉬운 방법은 unbuffer도구를 사용하는 것 입니다. 사용하려면 다음을 수행하십시오.

$ watch --color 'unbuffer <your-program>'

이렇게하면 프로그램의 플래그를 활성화하는 제어 시퀀스를 찾을 필요가 없습니다. 그러나주의 할 점은 시계 버전이 --color플래그를 지원해야한다는 것 입니다.

.NET을 사용하여 Debian 또는 Ubuntu에 unbuffer를 설치할 수 있습니다 sudo apt-get install expect.


'unbuffer <command>'-특정 명령을 사용하지 않고이 질문에 어떻게 대답합니까?
Danoram

@Danoram 당신에게 불분명 한 것은 무엇입니까? <command>색상으로 실행하려는 특정 프로그램 으로 교체 하는 데 도움이 필요하십니까 ?
Avamander

@Avamander 질문이 신고 되었기 때문에 해당 댓글을 작성했을 것입니다. 편집 내역을 확인하면 작성자가 답변을 업데이트 한 것을 볼 수 있습니다. 명확하지 않은 것은 없습니다. 내 댓글은 더 이상 관련이 없습니다.
Danoram

1

시계 설명서에서 :

인쇄되지 않는 문자는 프로그램 출력에서 ​​제거됩니다. 이를 보려면 명령 파이프 라인의 일부로 "cat -v"를 사용하십시오.

하지만 어떻게 사용하는지 잘 모르겠습니다.


5
이로 인해 제어 문자가 색상이 아닌 출력에 표시됩니다. 예를 들어 첫 번째 줄을 watch -c "ls --color|cat -v"보여줍니다 ^[[0m^[[01;34mAgent^[[0m.
Drew Noakes 2014

1
시도watch --color ls --color=always .
Zhang LongQI
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.