问题描述
是否有可能在linux命令行中每n秒重复一次命令。
例如,假设我有一个导入运行,我正在做
ls -l
检查文件大小是否增加。我想有一个命令让它自动重复。
最佳解决思路
每5秒观看一次……
watch -n 5 ls -l
如果您希望直观地确认更改,请在ls
命令之前附加--differences
。
根据OSX手册页,还有
The –cumulative option makes highlighting “sticky”, presenting a running display of all positions that have ever changed. The -t or –no-title option turns off the header showing the interval, command, and current time at the top of the display, as well as the following blank line.
Linux /Unix手册页可以找到here
次佳解决思路
while true; do
sleep 5
ls -l
done
第三种解决思路
“watch”不允许Busybox中的分数秒,而”sleep”则不允许。如果这对您很重要,请尝试以下方法:
while true; do ls -l; sleep .5; done
第四种思路
sleep
已经返回0
。因此,我正在使用:
while sleep 3 ; do ls -l ; done
这比mikhail的解决方案略短。一个小缺点是它在第一次运行目标命令之前就会休眠。
第五种思路
如果该命令包含一些特殊字符(如管道和引号),则需要使用引号填充该命令。例如,要重复ls -l | grep "txt"
,watch命令应为:
watch -n 5 'ls -l | grep "txt"'
第六种思路
当我们使用while
时,可以在没有cron的情况下定期运行命令。
作为命令:
while true ; do command ; sleep 100 ; done &
[ ex: # while true; do echo `date` ; sleep 2 ; done & ]
例:
while true
do echo "Hello World"
sleep 100
done &
不要忘记最后一个&
因为它会将你的循环放在后台。但是你需要使用命令“ps -ef | grep your_script”找到进程ID,然后你需要杀死它。所以在运行脚本时添加’&’。
# ./while_check.sh &
这是与脚本相同的循环。创建文件”while_check.sh”并将其放入其中:
#!/bin/bash
while true; do
echo "Hello World" # Substitute this line for whatever command you want.
sleep 100
done
然后键入bash ./while_check.sh &
运行它
第七种思路
watch 很好,但会清洁屏幕。
watch -n 1 'ps aux | grep php'
第八种思路
如果你想避免使用”drifting”,这意味着你想要命令每N秒执行一次,无论命令花了多长时间(假设它花费的时间少于N秒),这里有一些bash将每5秒重复一次命令,并具有one-second精度(和如果无法跟上,会打印出警告):
PERIOD=5
while [ 1 ]
do
let lastup=`date +%s`
# do command
let diff=`date +%s`-$lastup
if [ "$diff" -lt "$PERIOD" ]
then
sleep $(($PERIOD-$diff))
elif [ "$diff" -gt "$PERIOD" ]
then
echo "Command took longer than iteration period of $PERIOD seconds!"
fi
done
它可能仍然漂移一点,因为睡眠只精确到一秒钟。您可以通过创造性地使用date命令来提高此准确性。
第九种思路
如果您想要执行特定次数的操作,您可以随时执行此操作:
repeat 300 do my first command here && sleep 1.5
第十种思路
您可以运行以下内容并仅过滤大小。如果您的文件名为somefilename
,则可以执行以下操作
while :; do ls -lh | awk '/some*/{print $5}'; sleep 5; done
众多想法之一。