我正在寻找在Mac OS x上复制Linux 'watch'命令的最佳方法。我想每隔几秒钟运行一个命令,使用'tail'和'sed'对输出文件的内容进行模式匹配。
我在Mac电脑上最好的选择是什么?不下载软件能做到吗?
我正在寻找在Mac OS x上复制Linux 'watch'命令的最佳方法。我想每隔几秒钟运行一个命令,使用'tail'和'sed'对输出文件的内容进行模式匹配。
我在Mac电脑上最好的选择是什么?不下载软件能做到吗?
当前回答
Linux上可用的watch命令在macOS上不存在。如果你不想使用brew,你可以将这个bash函数添加到你的shell配置文件中。
# execute commands at a specified interval of seconds
function watch.command {
# USAGE: watch.commands [seconds] [commands...]
# EXAMPLE: watch.command 5 date
# EXAMPLE: watch.command 5 date echo 'ls -l' echo 'ps | grep "kubectl\\\|node\\\|npm\\\|puma"'
# EXAMPLE: watch.command 5 'date; echo; ls -l; echo; ps | grep "kubectl\\\|node\\\|npm\\\|puma"' echo date 'echo; ls -1'
local cmds=()
for arg in "${@:2}"; do
echo $arg | sed 's/; /;/g' | tr \; \\n | while read cmd; do
cmds+=($cmd)
done
done
while true; do
clear
for cmd in $cmds; do
eval $cmd
done
sleep $1
done
}
https://gist.github.com/Gerst20051/99c1cf570a2d0d59f09339a806732fd3
其他回答
你可以用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
我从这里开始回答:
bash -c 'while [ 0 ]; do <your command>; sleep 5; done'
但你最好装个手表,因为这不是很干净……
当你的主命令需要相当长的时间才能完成时,为了防止闪烁,你可以捕获输出,并只在它完成时清除屏幕。
function watch {while :; do a=$($@); clear; echo "$(date)\n\n$a"; sleep 1; done}
然后用它:
watch istats
上面的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
安装了Homebrew:
brew install watch