лучший способ программно проверить на сбой scp в сценарии оболочки - PullRequest
14 голосов
/ 11 марта 2011

У меня есть сценарий оболочки, над которым я работаю с этой строкой кода, которая выполняет цикл по локальным файлам (.gz) и выполняет scp.Я хочу проверить наличие ошибки scp, если это возможно.Я делаю цикл, чтобы я мог выводить каждое имя файла в журнал, чтобы я мог отслеживать его.

Может кто-нибудь показать мне, как проверить наличие сбой scp?или, еще лучше, хороший пример кода для этого?Спасибо за вашу помощь.

for gzfile in $LOCALDMPDIR/*.gz
do
  /usr/bin/scp -P 2222 -i $KEYFILE $gzfile foobar@$1:$TGTDIR
  echo "$gzfile is done. " 2>&1
done

Ответы [ 5 ]

22 голосов
/ 11 марта 2011

Использовать $?получить доступ к возвращаемому значению последней команды.Проверьте man-страницу для scp, чтобы проверить, но я думаю, что возвращаемое значение ноль означает успех.Ненулевое значение означает какой-то сбой.

9 голосов
/ 31 января 2014

использование:

if [ $? -eq 0 ];
then
    echo "OK"</br>
else
    echo "NOK"</br>
fi

там есть пробел после "[" и до "]". не окружать $? и 0 с кавычками

4 голосов
/ 11 марта 2011

Вы можете проверить переменную $?, чтобы увидеть код возврата scp. Если он возвращает ненулевое значение, то произошла ошибка.

1 голос
/ 03 июля 2014

Вы также можете попытаться записать ошибку в журнал:

for gzfile in $LOCALDMPDIR/*.gz
do
  /usr/bin/scp -P 2222 -i $KEYFILE $gzfile foobar@$1:$TGTDIR 2>>/var/log/scperror.log \
  && echo "$gzfile is done." \
  || echo "scp error: $gzfile"
done
0 голосов
/ 22 июня 2013

Для таких простых людей, как я, которые потратили больше времени, чем обычно, возятся с ошибками форматирования:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...