Подавлять предупреждения rsync, но не ошибки

Используйте негативный взгляд -вперед в Perl:

perl -ne 'print unless /#(?!!)/'

Это удаляет строки, содержащие #, за которыми не следует !. Если вы хотите сопоставить #только в начале строки, возможно, с предшествующим пробелом, используйте

perl -ne 'print unless /^\s*#(?!!)/'

1
01.08.2019, 12:49
3 ответа

Вы пробовали переключатель -q? Он подавляет сообщения об ошибках, отличных от -.

rsync -q user@server:source target

0
28.01.2020, 00:04

Возможно, сообщение Could not chdir to home directoryявляется ошибкой.

Это не функция rsync, как видно из аналогичного сценария(nohome— это созданная мной учетная запись, не имеющая домашнего каталога):

ssh nohome@localhost date
nohome@localhost's password:
Could not chdir to home directory /dev/null: Not a directory
Thu  1 Aug 07:02:05 UTC 2019

Я не могу найти способ подавить это сообщение(ssh -qи rsync -qоба не имеют соответствующего эффекта ).

Что касается rsync, он даже не видит это сообщение. Статус выхода из rsync— УСПЕХ (0 ), если все элементы успешно переданы -независимо от отсутствия домашнего каталога:

touch /tmp/x
rsync -av nohome@localhost:/tmp/x /tmp/y; echo Status=$?
nohome@localhost's password:
Could not chdir to home directory /dev/null: Not a directory
receiving incremental file list
x

sent 43 bytes  received 83 bytes  50.40 bytes/sec
total size is 0  speedup is 0.00
Status=0
1
28.01.2020, 00:04

Хорошо, я сам только что нашел решение:

if ! output=$(rsync user@server:source target 2>&1); then
  echo "$output"
fi

Вывод (stdout и stderr )сохраняется в переменной, которая выводится только в том случае, если код выхода не равен 0.

Не уверен, что есть лучший способ, но этот определенно работает для меня.

Фон

Пользователь на самом деле является учетной записью компьютера, а фактический rsyncвызывается через скрипт-оболочку, который принимает файл(/etc/machine.secret)в качестве пароля. Сам скрипт запускается через cron, поэтому мне пришлось найти способ получать почту тогда и только тогда, когда что-то пойдет не так.

Бездействие означает, что я получаю это сообщение об ошибке каждый раз, когда вызывается скрипт, выполнение довольно простого 2>/dev/nullозначает, что я вообще не получаю никаких сообщений об ошибках, поэтому мне пришлось найти способ отфильтровать их. это конкретное сообщение.

1
28.01.2020, 00:04

Теги

Похожие вопросы