Вы используете команду rsync
в подстановке команд. Подстановка команды будет заменена выводом команды внутри нее, и так, как написан ваш сценарий, этот вывод будет выполняться как команда, поэтому вы получаете это сообщение об ошибке и кажущийся странным вывод трассировки.
Вместо:
#!/bin/sh -x
rsync -auh --delete --out-format='%n' "$1" "$2" || exit 1
Если вы все еще хотите set -x
в подоболочке внутри вашего скрипта:
#!/bin/sh
( set -x; rsync -auh --delete --out-format='%n' "$1" "$2" ) || exit 1
exit 1
может быть отброшен, если rsync
является последней командой в скрипте, поскольку статус выхода скрипта будет статусом выхода последней выполненной команды, если только вы не хотите, чтобы он был ровно 1 как бы rsync
не получилось.