스크립트는 상태가 이 경우 작업을 수행하고 상태가 다음인 경우 다른 작업을 수행하지 않습니다.

스크립트는 상태가 이 경우 작업을 수행하고 상태가 다음인 경우 다른 작업을 수행하지 않습니다.

뭔가의 상태를 확인하려면 스크립트를 작성해야 합니다. 상태가 "복사 중"이면 종료합니다(또는 좀 더 자세히 설명하고 싶다면 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

관련 정보