programing

유닉스 명령어 "watch"를 사용한 색상

lastmoon 2023. 4. 17. 22:18
반응형

유닉스 명령어 "watch"를 사용한 색상

사용하는 명령어 중에는 색상이 표시되는 것도 있습니다만, 사용할 때는 색이 없어지는 것을 주의해 주세요.

watch -n 1 node file.js

어떻게 해서든 다시 색을 칠 수 있을까요?

의 새로운 watch이치노

를 들어, 「」입니다.watch --color ls -ahl --color.

관련.

색상을 예상할 때 흑백 출력이 표시되는 경우 실행 중인 명령어가watch단말기에 접속되어 있지 않은 것을 검출하고 있기 때문에, 칼라 출력을 강제할 필요가 있습니다.들어 다음과 같습니다.

CLICOLOR_FORCE=1 watch --color ls -ahl    # MacOS
watch --color ls -ahl --color=always      # Ubuntu

★★★의 ls 외 해야 할 수 이됩니다.watch.

「 」를하지 주세요.watch 않은 할 수 .워치 프로그램을 사용하면 단말기에 쓰고 있지 않은 것을 검출하여 색을 제거할 수 있습니다.제어 코드를 유지하려면 특정 프로그램 플래그를 사용해야 합니다.

깃발을 모르거나 깃발이 없으면 가난한 사람을 감시하게 할 수 있다.

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

약간의 깜박임(시계는 "더블 버퍼"로 작동함)이 있지만, 어떤 경우에는 충분히 유용합니다.

당신은 아마도 이중 버퍼링된 가난한 남자의 시계를 만들고 싶을 것이다.

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

그 후, 「I write to terminal」기능이 재차 표시됩니다.

다른 답변에서는 이 문제를 해결하지만 가장 쉬운 방법은 도구를 사용하는 것입니다.사용하기 위해서는 다음 작업을 간단하게 실시합니다.

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

이렇게 하면 프로그램의 플래그를 활성화하는 제어 시퀀스를 찾을 필요가 없습니다., 할 점은 이 " " " " 를 것입니다.--color

Debian Ubuntu unbuffer를 사용하여 또는 할 수 .sudo apt-get install expect.

할 수 .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어떤 이유로든 패키지를 업그레이드할 수 없는 옵션입니다.을 사용법

네.

워치는 컬러 출력으로 동작합니다.procps 패키지의 일부입니다(적어도 debian에서는).여기에서는 procps 패키지를 업데이트해야 한다는 질문에 대한 버그 리포트입니다.http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=129334

예: ubuntu 11.04에서 이 패키지는 http://packages.debian.org/wheezy/procps에서 작동합니다.

dr;dr

업데이트프로세서

명령어에 색상 출력을 강제하는 옵션이 없는 경우 다른 응답은 작동하지 않을 수 있습니다.또는 나처럼 게으르고 올바른 설정을 찾기 위해 각 명령의 매뉴얼을 참조하지 않을 수도 있습니다.저는 몇 가지 다른 기술을 시도했습니다.

script

스크립트 명령어는 인터랙티브터미널 세션에 의해 실행되는 출력을 캡처합니다.「 」의 --color「」watch상상: :

watch --color "script -q -c '<command>' /dev/null"

-q 하기 .-c 및 "용"입니다./dev/null는 로그 파일입니다.stdout에도 출력이 표시되므로 이 파일은 필요하지 않습니다.

편집: 이것은 지금까지의 옵션 중 가장 좋은 옵션입니다.이전의 솔루션은, 흥미가 있는 유저에게 남겨 두었습니다.

이전 시도: 터미널 창을 다시 씁니다.

하듯이 '''가 포함된 'clear ★★★★★★★★★★★★★★★★★」sleep는 출력을 캡처하지 않고 단말기에서 명령어를 실행할 수 있습니다. 깜박임을 합니다. 를 들어, 깜박임, 깜빡임, 깜빡임, 깜빡임, 깜빡임 등이 있습니다.clear는 모든 문자를 삭제한 후 명령어가 새 출력을 한 줄씩 인쇄하는 데 시간이 걸립니다.

도 이 하려면 ''를 하면 됩니다.tput 새을 볼 수 있도록 위에 새 출력을 쓰면서 이전 출력을 볼 수 있도록 합니다.

스크립트는 다음과 같습니다.

#!/bin/sh
trap "tput cnorm" EXIT  # unhide the cursor when the script exits or is interrupted

# simple interval parameter parsing, can be improved
INTERVAL=2s
case $1 in
  -n|--interval)
    INTERVAL="$2"
    shift; shift
  ;;
esac

clear           # clear the terminal
tput civis      # invisible cursor, prevents cursor flicker

while true; do
  tput cup 0 0  # move cursor to topleft, without clearing the previous output
  sh -c "$*"    # pass all arguments to sh, like the original watch
  tput ed       # clear all to the end of window, if the new output is shorter
  sleep "$INTERVAL"
done

이 스크립트는 색상의 문제를 해결하지만 다른 버그는 남아 있습니다.명령 출력의 행이 짧아지면 나머지 행이 지워지지 않으므로 출력이 실제와 일치하지 않을 수 있습니다!

시계 설명서:

인쇄되지 않은 문자는 프로그램 출력에서 삭제됩니다.명령어를 표시하려면 명령어 파이프라인의 일부로 cat -v를 사용합니다.

하지만 어떻게 사용하는지 잘 모르겠어요.

unbuffer 프로세스에서 TTY에 기입하고 있는지 여부를 알 수 없게 하는 훌륭한 방법입니다만, 주의할 필요가 있습니다.watch 는 아직 8비트 이상 색상을 지원하지 않습니다.

ls좀 더 현대적인 걸 쓰거나exa 「」를 .--theme=ansi(이른바)--theme=base16동작합니다). git log는 항상 3비트 컬러(소스)를 사용하기 때문에 개봉 즉시 동작합니다.

예:

watch --color -d -n 0.5 'mycommand file | bat --color=always --theme=ansi'

「 」를 할 수도 .-f--color=always.

다른 대안은 Pygments일 수 있다.

언급URL : https://stackoverflow.com/questions/3793126/colors-with-unix-command-watch

반응형