Я новичок в сценариях bash, и для моей первой попытки сценария я отправляю файлы в Dropbox моего профессора на том же сервере.
Код такой:
#! /bin/bash
echo "Submit Lab$1? \c"
read choice
if [ $choice = "y" ]; then
echo "Sending to Prof's dropbox..."
cp -r /path/to/lab$1 /path/to/dropbox
else
echo "Submission terminated."
fi
Команда используется просто « $ submit 1
» (1 - одно целое число, соответствующее лабораторной работе, которую я хочу отправить)
Сценарий bash добавляет введенный аргумент (одно целое число) к необходимому имени файла (каталогу), затем отправляет этот каталог в Dropbox моего профи, используя cp
.
Больше для обучения, чем для абсолютной необходимости, я хотел создать чистую подсказку, которая будет улавливать любые ошибки cp
(например, файл не существует) и иметь возможность выводить мое собственное сообщение об ошибке .
В общем, что-то вроде:
echo "Submit lab$1?"
read choice
echo "Send to Prof's dropbox"
cp -rv /path/to/lab$1 /path/to/dropbox
<catch any errors from cp>
if [ cp has errors ]
echo "Submission failed."
else if [ cp has no errors ]
echo "Submission successful."
And so on...
Я понимаю, что могу использовать подробный режим, и что cp
сам выводит ошибки, но, как было сказано ранее, я делаю это с целью обучения обнаружение ошибки в bash и возможность создать чистую подсказку.
Любая помощь приветствуется.
Спасибо!
Также: У меня есть похожий сценарий, который отправляет лабораторные работы с моего ноутбука, используя scp
. Если у меня есть ответ на этот вопрос, могу ли я точно так же применить решения к scp?
РЕДАКТИРОВАТЬ: Я не хочу, чтобы ошибки cp
выводились в оболочку! Наиболее распространенной ошибкой, вероятно, будет «не удается выполнить статистику: нет такого файла или каталога». Я хотел бы поймать эту ошибку и просто сказать «Ошибка отправки».
РЕДАКТИРОВАТЬ №2: Ответ jcollado правильный, проблема с моей стороны. Не заканчивал вложенный if-else
надлежащим « fi
.»
После исправления все работало, как задумано. По-прежнему нужно поймать вывод ошибки, но я считаю, что знаю, куда мне нужно пойти, чтобы выяснить это самостоятельно, поэтому на этот вопрос, насколько я понимаю, есть ответ.
ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: Ах, какого черта - перенаправление было настолько простым, что я решил, что поставлю решение здесь.Если вы используете Linux, просто добавьте " 2> / dev / null
" (если вы не хотите, чтобы сообщения об ошибках сохранялись в каком-либо файле) после cp
, чтобы сделать " cp -r / первый / путь / второй / путь 2> / dev / null
"