뭔가의 상태를 확인하려면 스크립트를 작성해야 합니다. 상태가 "복사 중"이면 종료합니다(또는 좀 더 자세히 설명하고 싶다면 60분 후에 다시 시도하세요.) 아무것도 반환되지 않으면(모든 것이 동기화되어 있다는 두 번째 명령에 따라) 다른 작업을 수행하세요.
복사하는 경우 종료하거나 다시 시도합니다. 60 NULL인 경우 추가 작업을 수행합니다.
root@box:~$ ./prog status
PyDsk /home In Sync
PyDsk /trax Copying 85% complete
PyDsk /trax2 In Sync
PyDsk /trax3 Copying 97% complete
PyDsk /traxnl Copying 50% complete
PyDsk /traxnl2 Copying 69% complete
PyDsk /traxnl3 Copying 56% complete
PyDsk /traxnl4 In Sync
PyDsk /traxnv In Sync
PyDsk /traxnv2 In Sync
PyDsk /ulog In Sync
root@box:~$ ./prog status | grep complete | awk '{print $3;}'
Copying
Copying
Copying
Copying
Copying
편집합니다. 나는 이것을 달성하는 다른 방법에 열려 있습니다. 나는 내가 일을 시작하는 방식을 받아들이지 않았습니다. 그것은 단지 내가 생각할 수 있는 유일한 방법이었습니다. 좀 더 우아한 것이 있으면 받아들이겠습니다 :)
답변1
다음과 같이 더 간단한 작업을 수행할 수 있습니다.
[[ -n $(./prog status | awk '/complete/ {print $3}') ]] && echo "foo"
명령 출력이 비어 있으면 이 줄은 단순히 "foo"를 에코합니다.
답변2
누군가가 더 우아한 해결책을 내놓을 가능성이 높지만 이것은 내 것입니다.
#!/bin/bash
count=`./prog status | grep complete | awk '{print $3}' | wc -l`
zero="0"
if [ "$count" -eq "$zero" ]
then echo "all done."
else echo "wait a little more and try again."
fi
count 변수는 복사 작업 수입니다. count가 0이면(즉, 진행 중인 복사 작업이 없음을 의미) 스크립트는 모두 완료되었다고 인쇄하고, 그렇지 않으면 조금 더 기다렸다가 다시 시도한다고 인쇄합니다. 자신만의 명령을 사용하여 echo가 포함된 줄을 변경할 수 있습니다.
답변3
완료는 복사 상태에서만 발생하는 것 같습니다. 따라서 둘 중 어느 것을 선택하는지는 중요하지 않습니다.
while ( ./prog status|grep -qw complete 2>/dev/null )
do
echo Waiting one hour for copy to complete.
sleep 3600
# or exit if you like to
done
# Synced, do whatever is to be done