Я новичок в сценарии bash, и сейчас я работаю над скриптом bash, который должен загружать список файлов с сервера с помощью команды scp. Тем не менее, нет никакой гарантии, что файл есть, поэтому я хочу иметь возможность выводить список файлов, которые не были найдены. В настоящее время я делаю это, чтобы вывести сообщение об ошибке:Вывод Bash в конце программы
for FILENAME in [email protected] do
scp $SERVER:/home/usr/$FILENAME .
if [ $? -ne 0 ] then
echo "WARNING: $FILENAME was not found in $SERVER."
fi
done
Код выше работает, насколько мне известно, но проблема у меня в том, что из-за того, как УПП работает, там уже будет тонна текста на экране (поскольку каждая команда scp будет показывать 100% загруженную строку), и я, вероятно, пропущу предупреждение или два. Есть ли простой способ для меня, чтобы все предупреждающие сообщения печатались в самом конце, имея список, которые не были найдены?
EDIT: Я забыл прояснить, почему я использую эхо вместо стандартного «файла не найденного» - мой код на самом деле должен выглядеть в нескольких местах, если он не может найти его в первую очередь. Таким образом, более полная версия выглядит вроде как это:
for FILENAME in [email protected] do
scp $SERVER:/home/usr/$FILENAME .
if [ $? -ne 0 ] then
scp $SERVER:/home/usr/documents/$FILENAME .
if [ $? -ne 0 ] then
scp $SERVER:/home/usr/documents/local/$FILENAME .
if [ $? -ne 0 ] then
echo "WARNING: $FILENAME was not found in $SERVER."
fi
fi
fi
done
Если он не находит его в первом месте, это хорошо, но я только хочу, чтобы бросить ошибку, если я не могу найти его в любом из мест.
Использовать '-q', чтобы сказать' scp', чтобы он был тихим? Повторите в конце аргументы в конце и посмотрите, существуют ли локальные файлы? Не эхо в том, что 'if' присоединяется к переменной массива и печатает этот массив в конце? echo вместо стандартной ошибки и передать это стандартное значение файла или канала в '/ dev/null' из' scp'? –
@ Этан Рейснер: кажется, что '-q' скрывает только метр прогресса, а не stderr. –
Строка из scp о файле, который не существует/не работает, - это, скорее всего, информация, которую фактически хочет OP (так как это делает для них работу). Если scp не содержит другую информацию об отказе, также связанную с stderr. –