Я очень новичок в сценариях bash, и для моей первой попытки script я отправляю файлы в свой почтовый ящик профессора на том же сервере.
Код выглядит так:
#! /bin/bash
echo "Submit Lab$1? \c"
read choice
if [ $choice = "y" ]; then
echo "Sending to Prof dropbox..."
cp -r /path/to/lab$1 /path/to/dropbox
else
echo "Submission terminated."
fi
Использование команды просто "$ submit 1
" (1 - одно целое, соответствующее той лаборатории, которую я хочу отправить)
bash script добавляет введенный аргумент (одно целое число) к необходимому имени файла (директории), а затем отправляет этот каталог в мой drop dropbox с помощью cp
.
Больше для обучения, чем абсолютной необходимости, я хотел создать чистую подсказку, которая поймает любые ошибки cp
(например, файл не существует) и сможет вывести собственное сообщение об ошибке.
Итак, в основном, что-то вроде:
echo "Submit lab$1?"
read choice
echo "Send to Prof 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 и возможности сделать чистую приглашение.
Любая помощь будет оценена.
Спасибо!
Также: У меня есть аналогичный script, который представляет лаборатории с моего ноутбука, используя scp
. Предполагая, что у меня есть ответ на этот вопрос, могу ли я применить решения для scp точно так же?
EDIT: Я не хочу, чтобы ошибки cp
выводились в оболочку! Наиболее распространенной ошибкой, вероятно, будет "не может быть stat blah: нет такого файла или каталога". Я хотел бы поймать эту ошибку и просто сказать: "Submission failed."
EDIT # 2: Ответ jcollado правильный, проблема с моей стороны. Не закончил вложенный if-else
с помощью правильного "fi
."
После исправления этого, он работал по назначению. Все еще нужно поймать выход ошибки, но я верю, что знаю, где мне нужно разобраться в этом самостоятельно, поэтому на этот вопрос мне ответил, насколько мне известно.
ОКОНЧАТЕЛЬНЫЙ РЕДАКТ: А, черт возьми, перенаправление было так просто, я подумал, что поставлю решение здесь. Если вы используете Linux, просто добавьте "2>/dev/null
" (если вы не хотите, чтобы сообщения об ошибках сохранялись в любом файле) после cp
, чтобы сделать "cp -r /first/path /second/path 2>/dev/null
"