在Linux命令行中,是否有可能每n秒重复一次命令?
假设,我有一个导入正在运行,我正在做
ls -l
检查文件大小是否在增加。我想有一个命令,有这个自动重复。
在Linux命令行中,是否有可能每n秒重复一次命令?
假设,我有一个导入正在运行,我正在做
ls -l
检查文件大小是否在增加。我想有一个命令,有这个自动重复。
当前回答
一个简洁的解决方案,如果您想重复运行命令直到失败,这个解决方案特别有用,并且可以让您看到所有输出。
while ls -l; do
sleep 5
done
其他回答
如果你想避免“漂移”,这意味着你想让命令每N秒执行一次,而不管它需要多长时间(假设它花费的时间小于N秒),这里有一些bash,它会以一秒的精度每5秒重复一个命令(如果它不能跟上,它会打印出一个警告):
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命令来提高这种准确性。
while true; do
sleep 5
ls -l
done
如果命令中包含一些特殊字符,如管道字符、引号等,则需要使用引号进行填充。例如,要重复ls -l | grep "txt",则watch命令应为:
查看-n 5 'ls -l | grep "txt"'
为了更容易地减少漂移,使用:
while :; do sleep 1m & some-command; wait; done
由于bash运行循环结构和sleep命令实际执行的时间,仍然会有少量的漂移。
提示:':'的值为0即为真。
您可以运行以下命令并仅过滤大小。如果文件名为somefilename,可以执行以下操作
而:;Do ls -lh | awk '/some*/{print $5}';睡眠5;完成
众多想法之一。