次のコマンドを使用して、サーバーにファイルをインポートしています。
scp zumodo@shold:/test/test/test/server.py /test/test/test/test.py~/;
新しくインポートしたファイルtest.py〜が既存のtest.pyと異なる場合は、サーバーを再起動したいと思います。シェルスクリプトを使用してこれを行うにはどうすればよいですか?
2つのファイルをdiff()することができます。ゼロ(0)の戻りコードは、違いがないことを意味します。 1の戻りコードは、ファイルが異なることを示しています。
if ! cmp test.py test.py~ >/dev/null 2>&1
then
# restart service
fi
それを分解する:
cmp test.py test.py~
は、test.pyとtest.py〜が同一の場合はtrue(0)を返し、それ以外の場合はfalse(1)を返します。これはman cmp
で確認できます。!
はその結果を反転するため、if
ステートメントは「test.pyとtest.py〜が異なる場合」に変換されます。>/dev/null 2>&1
はcmp
のすべての出力を nullデバイス に送信するため、コンソールに不要なノイズが発生することなく、真/偽の比較結果が得られます。私は次のようなことをします
zumodo@shold$ cat /test/test/test/server.py | ssh zumodo@otherhost 'cat - > /test/test/test/test.py.new ; cmp /test/test/test/test.py /test/test/test/test.py.new || (mv /test/test/test/test.py.new /test/test/test/test.py ; echo issue restart command here)'