태그 보관물: watch

watch

색상이 보존 된 bash watch 명령 “cat -v”를 사용하려면 명령 파이프

보낸 사람 man watch:

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

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

watch ls -al --color



답변

올바른 명령은

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

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


답변

나는 ‘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"

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


답변

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

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


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

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


답변

업데이트 : 최신 버전의 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'


답변