我正在寻找在Mac OS x上复制Linux 'watch'命令的最佳方法。我想每隔几秒钟运行一个命令,使用'tail'和'sed'对输出文件的内容进行模式匹配。
我在Mac电脑上最好的选择是什么?不下载软件能做到吗?
我正在寻找在Mac OS x上复制Linux 'watch'命令的最佳方法。我想每隔几秒钟运行一个命令,使用'tail'和'sed'对输出文件的内容进行模式匹配。
我在Mac电脑上最好的选择是什么?不下载软件能做到吗?
当前回答
上面的shell可以做到这一点,你甚至可以将它们转换为别名(你可能需要包装一个函数来处理参数):
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 directory; double-quotes around command to keep its arguments together
Homebrew也可以从http://procps.sourceforge.net/:上安装手表
brew install watch
其他回答
使用MacPorts:
$ sudo port install watch
你可以用shell循环来模拟基本的功能:
while :; do clear; your_command; sleep 2; done
这将永远循环,清除屏幕,运行命令,并等待两秒钟-基本的watchyour_command实现。
你可以更进一步,创建一个watch.sh脚本,它可以接受your_command和sleep_duration作为参数:
#!/bin/bash
# usage: watch.sh <your_command> <sleep_duration>
while :;
do
clear
date
$1
sleep $2
done
或者,在你的~/。bashrc文件:(
function watch {
while :; do clear; date; echo; $@; sleep 2; done
}
我从这里开始回答:
bash -c 'while [ 0 ]; do <your command>; sleep 5; done'
但你最好装个手表,因为这不是很干净……
也许“看”并不是你想要的。你可能想要寻求帮助来解决你的问题,而不是实现你的解决方案!:)
如果您的真正目标是根据tail命令中看到的内容触发操作,那么您可以将其作为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旋转。你想用这个来代替小写的-f。查看男人尾巴了解细节。
也就是说,如果你真的想定期运行一个命令,提供的其他答案可以变成一个简短的shell脚本:
#!/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