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
추신: 다음과 같은 것을 사용해 보았지만 tail -f
다른 프로그램이 일괄 입력을 요구할 때는 작동하지 않는 것 같습니다. 모든 조언을 환영합니다.
pss: clipboardpipe
원격 시스템의 홈 디렉터리에 있는 명명된 파이프입니다.
답변1
GNU date
는 %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 패키지에서 제공하는 명령입니다.