Mac OSX에서 Linux ‘watch’명령을 복제하는 가장 좋은 방법을 찾고 있습니다. ‘tail’과 ‘sed’를 사용하여 출력 파일의 내용에서 패턴 일치를 위해 몇 초마다 명령을 실행하고 싶습니다.
Mac에서 가장 좋은 옵션은 무엇이며 소프트웨어를 다운로드하지 않고도 할 수 있습니까?
답변
쉘 루프를 사용하여 기본 기능을 에뮬레이션 할 수 있습니다.
while :; do clear; your_command; sleep 2; done
그것은 영원히 반복되고 화면을 지우고 명령을 실행하고 2 초 동안 기다립니다-기본 watch your_command
구현
이 단계를 더 수행하고 만들 수 있습니다 watch.sh
받아 들일 수 스크립트 your_command
및 sleep_duration
매개 변수로를 :
#!/bin/bash
# usage: watch.sh <your_command> <sleep_duration>
while :;
do
clear
date
$1
sleep $2
done
답변
답변
답변
위의 쉘은 트릭을 수행합니다. 별칭으로 변환 할 수도 있습니다 (매개 변수를 처리하기 위해 함수를 래핑해야 할 수도 있음)
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