我正在尝试通过 ssh 从远程管道获取批量输入。我下面的脚本工作正常,但我想在其中添加某种检查,以便如果出现问题或打破循环,如果脚本开始运行,循环就会结束。
如何添加一个组件来检查循环是否运行,例如 3 秒内运行 5 次,然后脚本将中断循环并自动终止?
#!/bin/sh
if [ -z "$1" ]
then
echo " usage: user@host"
echo
exit
fi
while [ 1 ]
do
CB=`ssh $1 cat clipboardpipe`
if [ -n "$CB" ]
then
echo $CB | /usr/bin/pbcopy
echo $CB | /usr/local/bin/growlnotify
fi
sleep 1
done
ps:我曾考虑过使用类似的东西tail -f
,但当其他程序需要批量输入时,它似乎不起作用。欢迎所有建议。
pss:clipboardpipe
是远程系统主目录中的命名管道。
答案1
GNUdate
通过%N
.
every=3 # test every n'th itteration
bsecs=0.95 # break at secs (float)
bnano=$(printf '%0.9f' "$bsecs"); bnano=${bnano/./};
# avoid lead '0' octal clash when time slice < 1 sec
shopt -s extglob; bnano=${bnano#+(0)}
tprev=$(date +%s%N)
for i in {1..24} ;do # just a test loop
if ((i%every==1)) ;then
tnow=$(date +%s%N)
if ((tnow-tprev>=bnano)) ;then
echo "Auto Break! $every itteratons took longer than $bsecs secs"
break
fi
((tprev=tnow))
fi
# do something, eg sleep for testing
sleep 1.$i; echo $i
done
答案2
如果您使用的是 Linux,则可以使用暂停coreutils 包提供的命令。