Действие Shellscript, если два файла отличаются друг от друга

Я импортирую файл на свой сервер с помощью этой команды:

scp [email protected]:/test/test/test/server.py /test/test/test/test.py~/;

Я хочу перезагрузить свой сервер, если новый импортированный файл test.py ~ отличается от уже существующего test.py. Как мне сделать это с помощью shellscript?

Ответы

Ответ 1

Вы можете разделить() два файла. Код возврата 0 (0) означает отсутствие различий. Код возврата одного (1) говорит, что файлы отличаются.

Ответ 2

if ! cmp test.py test.py~ >/dev/null 2>&1
then
  # restart service
fi

Нарушение этого:

  • cmp test.py test.py~ возвращает true (0), если test.py и test.py ~ идентичны, иначе false (1). Вы можете увидеть это в man cmp.
  • ! инвертирует результат, поэтому оператор if преобразуется в "если test.py и test.py ~ разные".
  • Переадресация >/dev/null 2>&1 отправляет весь вывод cmp в null device, так что вы получите только результат сравнения true/false, без каких-либо нежелательных помех на консоли.

Ответ 3

Я бы сделал что-то вроде

[email protected]$ cat /test/test/test/server.py | ssh [email protected] '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)'