最初の障害物で詰まった!
Bashスクリプトで複数のコマンドを実行したいです。まず、次のようないくつかのディレクトリをrsyncします。
rsync -e ssh -az [email protected]:/home /location/of/local/folder
次に、ファイルを圧縮し、次のように別の場所にコピーします。
cd /location/of/local/folder
tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz home
これが意味があることを願っています。
問題は、明らかにディレクトリがtarredされる前にrsyncが完了したいということです。もしそうなら、tar
コマンドを実行する前にrsyncが完了したことを確認するために使用できるコードはありますか?
たとえば(擬似コード)
rsync
while(is syncing){
sleep 10
}
tar
それとも、.sh
最初の行が完了して終了した後にのみ、私のスクリプトは次の行を実行しますか?
答え1
シェルスクリプトのコマンドは順次実行されます。最初のコマンドが完了すると、次のコマンドはrsync
完了するまで実行されません。rsync
確認したいのは、rsync
次のコマンドに進む前に正常に完了することです。
これは最もエレガントなソリューションではありませんが、実装するのが最も簡単です。
rsync -e ssh -az [email protected]:/home /location/of/local/folder &&\
tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz /location/of/local/folder
これは、シャットダウン状態がある場合にのみrsync
機能することに注意してください0
。他の終了状態とコマンド2は実行されません。
ANDリストとORリストは、&&で区切られたいくつかのパイプの1つのシーケンスです。 と|| AND リストと OR リストが実行されます。 関連性を残しました。 ANDリストの形式は次のとおりです。 コマンド 1 && コマンド 2 command2 は command1 が終了状態 0 を返した場合にのみ実行されます。
rsync
終了値に応じて他の操作を実行すると、スクリプトにインテリジェンスを追加できます。
#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin
rsync -e ssh -az [email protected]:/home /location/of/local/folder
if [ $? != "0" ]
then
echo "There was a problem"
else
tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz /location/of/local/folder
fi