[macos] OSX bash, ‘watch’명령

Mac OSX에서 Linux ‘watch’명령을 복제하는 가장 좋은 방법을 찾고 있습니다. ‘tail’과 ‘sed’를 사용하여 출력 파일의 내용에서 패턴 일치를 위해 몇 초마다 명령을 실행하고 싶습니다.

Mac에서 가장 좋은 옵션은 무엇이며 소프트웨어를 다운로드하지 않고도 할 수 있습니까?



답변

쉘 루프를 사용하여 기본 기능을 에뮬레이션 할 수 있습니다.

while :; do clear; your_command; sleep 2; done

그것은 영원히 반복되고 화면을 지우고 명령을 실행하고 2 초 동안 기다립니다-기본 watch your_command구현

이 단계를 더 수행하고 만들 수 있습니다 watch.sh받아 들일 수 스크립트 your_commandsleep_duration매개 변수로를 :

#!/bin/bash
# usage: watch.sh <your_command> <sleep_duration>

while :;
  do
  clear
  date
  $1
  sleep $2
done


답변

함께 브루 설치 :

brew install watch


답변

macports 사용 :

$ sudo port install watch


답변

위의 쉘은 트릭을 수행합니다. 별칭으로 변환 할 수도 있습니다 (매개 변수를 처리하기 위해 함수를 래핑해야 할 수도 있음)

alias myWatch='_() { while :; do clear; $2; sleep $1; done }; _'

예 :

myWatch 1 ls ## self-explanatory
myWatch 5 "ls -lF $HOME" ## every 5 seconds, list out home dir; double-quotes around command to keep its args together

또는, 홈브류는 http://procps.sourceforge.net/ 에서 시계를 설치할 수 있습니다

brew install watch


답변

“시계”가 원하는 것이 아닐 수도 있습니다. 솔루션 구현이 아닌 문제 해결에 도움을 요청하고 싶을 것입니다. 🙂

실제 목표가 command 에서 본 내용을 기반으로 작업tail실행하는 것이라면 꼬리 자체의 일부로 수행 할 수 있습니다. “정기적으로”실행하는 대신 필요에 따라watch 코드 실행할 수 있습니다 .

#!/bin/sh

tail -F /var/log/somelogfile | while read line; do
  if echo "$line" | grep -q '[Ss]ome.regex'; then
    # do your stuff
  fi
done

참고 tail -F가 newsyslog 또는 logrotate에 의해 회전됩니다 경우에도 로그 파일을 수행 할 것입니다. 소문자 대신 이것을 사용하고 싶습니다 tail -f. man tail자세한 내용을 확인 하십시오.

즉, 실제로 정기적으로 명령을 실행하려면 제공된 다른 답변을 짧은 쉘 스크립트로 바꿀 수 있습니다.

#!/bin/sh
if [ -z "$2" ]; then
  echo "Usage: $0 SECONDS COMMAND" >&2
  exit 1
fi

SECONDS=$1
shift 1
while sleep $SECONDS; do
  clear
  $*
done


답변

여기 에서 답을 얻으 십시오 .

bash -c 'while [ 0 ]; do <your command>; sleep 5; done'

그러나 이것은 매우 깨끗 하지 않기 때문에 시계설치 하는 것이 좋습니다 .


답변

시계를 통해 설치하지 않으려는 경우

brew install watch

나를 위해 완벽하게 설치되고 작동 한 다른 유사 / 복사 버전이 있습니다.

brew install visionmedia-watch

https://github.com/tj/watch