scp
использует интерактивный терминал для печати этого модного индикатора выполнения.Печать этого вывода в файл вообще не имеет смысла, поэтому scp
определяет, когда его вывод перенаправлен куда-либо еще, кроме терминала, и отключает этот вывод.
Однако имеет смысл перенаправитьвывод ошибки в файл при наличии ошибок.Вы можете отключить стандартный вывод, если хотите.
Есть два возможных способа сделать это.Во-первых, вызвать ваш скрипт с перенаправлением как stderr, так и stdout в файл журнала:
./myscript.sh >log 2>&1
Во-вторых, это сказать bash, что нужно сделать это прямо в вашем скрипте:
#!/bin/sh
exec 2>&1
if $C_SFTP; then
scp -r $C_SFTP_USER@$C_SFTP_HOST:$C_SOURCE "$C_TMPDIR"
fi
...
Если вам нужно проверить на наличие ошибок, просто убедитесь, что $?
равно 0
после выполнения команды scp:
if $C_SFTP; then
scp -r $C_SFTP_USER@$C_SFTP_HOST:$C_SOURCE "$C_TMPDIR"
RET=$?
if [ $RET -ne 0 ]; then
echo SOS 2>&1
exit $RET
fi
fi
Другой вариант - сделать set -e
в вашем скрипте, который сообщает bash-скрипту о необходимости отчетасбой, как только одна из команд в скриптах дает сбой:
#!/bin/bash
set -e
...
Надеюсь, это поможет.Удачи!