スクリプトは、状況がこの場合は操作を実行し、状況が次の場合は他の操作を実行しません。

スクリプトは、状況がこの場合は操作を実行し、状況が次の場合は他の操作を実行しません。

何かの状態を確認するには、スクリプトを作成する必要があります。ステータスが「コピー中」の場合は終了します(またはもう少し詳しく説明したい場合は60分後にもう一度やり直してください)、何も返されない場合(すべてが同期されているという2番目のコマンドに従って)、別の操作を実行してください。

コピーする場合は終了または再試行してください。 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

関連情報