색상이 보존 된 bash watch 명령


57

보낸 사람 man watch:

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

다음 cat -v에서 컬러 출력을 보려면 어떻게 사용합니까?

watch ls -al --color

답변:


63

올바른 명령은

watch --color "ls -a1 --color"

매뉴얼 페이지 나 --help 화면에는 설명되어 있지 않습니다. 그것을 찾으려면 문자열을 사용해야합니다.


@ PawełGościcki Nevermind는 이미 겁에 질린 것을 발견했지만 phpunit과 작동하지 못했습니다.
Ikke

1
내 시계는 v0.3.0이고 우분투 10.0에 있습니다
Paweł Gościcki

2
또한 버전 0.3.0을했습니다 간단하게는 "LS --color"시계 명령이 작동하지만 몇 가지 이유로 더 복잡한 시나리오를하지 않습니다 watch --color "sudo iwlist wlan0 scanning | egrep 'Quality|ESSID' | egrep --color -i 'foobar|$'"색상을 :( 먹을 것이다
수학

@math : 작은 따옴표와 큰 따옴표를 바꿔보십시오.
Dennis Williamson

watchprocps의 (대부분의 리눅스 배포판의 기본은, 내가 믿는)에서는이 --colorV3.3.2 이후 옵션을 선택합니다.
sleske

27

나는 'watch'명령으로 가능하지 않을 수도 있다고 생각합니다. 더 긴 방법은 다음과 같습니다.

while true; do clear; date;echo;ls -al --color; sleep 2; done

예를 들어 다음과 같이 스크립트에 넣을 수 있습니다.

echo "while true; do clear; date;echo;\$*;sleep 2; done" > watch2
chmod +x watch2
./watch2 ls -al --color

명확히하기 위해 'watch'명령으로 불가능하다고 생각하는 이유는 다음과 같습니다. cat -v를 사용하면 어떻게되는지 확인하십시오.

watch "ls -al --color|cat -v"

그것은 당신에게 당신이 원하는 것이 아니라고 생각하는 색상 제어 문자를 보여줍니다.


man watch명확하게 제안하지 않으면서도 가능해야합니다 watch.
Paweł Gościcki

색상을 볼 수 있다고 말하는 것은 아닙니다. 인쇄 할 수없는 문자를 볼 수 있다고합니다. cat -v무슨 말인지 알기 위해 위와 같은 명령을 시도 하십시오 man watch.
davr

1
a) 변수에 표시 할 데이터 수집, b) 화면 지우기, c) 변수 인쇄를 통해 깜박임 지속 시간을 약간 줄일 수 있습니다.
Nick Russo

1
@NickRusso 제안 해 주셔서 감사합니다. 이와 같은 것이 깜박임을 크게 줄입니다.while true; do out=$(date;echo;ls -al --color);clear;echo $out;sleep 2;done
Kevin Mark

1
@KevinMark : 여러 줄을 처리하려면 따옴표를 사용해야합니다 : echo "$out". stackoverflow.com/q/2414150/86967
nobar

6

나와 같은 Mac을 사용하는 경우 watchHomebrew에서 색상을 지원하지 않습니다.

원하는 것은 fswatch 이지만 아직 Homebrew가 아닙니다. 그것을 설치하려면 약간 더 복잡한 것을 원할 것입니다

https://raw.github.com/mlevin2/homebrew/116b43eaef08d89054c2f43579113b37b4a2abd3‌​/Library/Formula/fswatch.rb

사용법 은 이 SO 답변 을 참조하십시오 .


2
watch명령 은 파일 시스템에만 적용되며 명령에 적용됩니다
Brice

fswatch는 브루 0.9.5로 볼 수 있습니다
code_monk

1

업데이트 : 최신 버전의 watch문제가 해결되었습니다. 따라서 색상 watch --color이 잘못된 경우 업데이트하는 것이 좋습니다 (시스템의 경우 procps패키지에 있음).


색상 지원 watch --color은 내 경험에서 제한적입니다 (하지만 충분합니다 ls -l --color). 다음은 몇 가지 추가 기능, 가장 중요한 깜박임 감소 기능을 갖춘 @davr의 답변 버전입니다. .bashrc에 넣고로 사용할 수 있습니다 cwatch ls -l --color.

# `refresh cmd` executes clears the terminal and prints
# the output of `cmd` in it.
function refresh {
  tput clear || exit 2; # Clear screen. Almost same as echo -en '\033[2J';
  bash -ic "$@";
}

# Like watch, but with color
function cwatch {
   while true; do
     CMD="$@";
     # Cache output to prevent flicker. Assigning to variable
     # also removes trailing newline.
     output=`refresh "$CMD"`;
     # Exit if ^C was pressed while command was executing or there was an error.
     exitcode=$?; [ $exitcode -ne 0 ] && exit $exitcode
     printf '%s' "$output";  # Almost the same as echo $output
     sleep 1;
   done;
}

당신은 또한 같은 것을 시도 할 수 있습니다

cwatch 'ls -l --color | head -n `tput lines`'

터미널에 출력보다 적은 라인이있는 경우 그러나 모든 선이 터미널 너비보다 짧은 경우에만 작동합니다. 내가 아는 가장 좋은 해결 방법은 다음과 같습니다.

cwatch 'let lines=`tput lines`-2; ls -l --color | head -n $lines'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.