LINUX.ORG.RU
решено ФорумAdmin

else echo (debug)

 


0

1

В bash есть команда

mv $file $SRC

Каким образом вывести echo:

Если команда выполняется, то echo «moving done»

Если не выполняется по каким либо причинам, то echo «moving error»



Последнее исправление: maxim2049 (всего исправлений: 1)

Ответ на: комментарий от egorcod

Не так, ему надо почитать про статусы выполнения. И заодно можно заюзать test чтобы вызвать слезу умиления у препода.

anonymous
()
Ответ на: комментарий от anonymous

Есть такой скрипт, но при любом раскладе он выдаёт echo «moving»

if [ $DEBUG == 1 ]; then echo "Processing file: $file"; fi;
    echo "Processing file: $file" >> $LOG_FILE;
    if [ "$?" -eq "0" ]; then
        if [ $DEBUG == 1 ]; then echo "Moving"; fi;
        echo "Moving" >> $LOG_FILE;
        mv $file $PRE_RM_DIR 2>/dev/null;
    else
        if [ $DEBUG == 1 ]; then echo "ERROR!"; fi;
        echo "ERROR!" >> $LOG_FILE;
maxim2049
() автор топика
mv $file $SRC && echo moving done || echo moving error
beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от anonymous

В своём коде косяк понял.

Что нужно:

Изначально выполняется команда put $file (на ftp сервер)

Если команда выполнилась успешно, то соответственно необходимо вывести сообщение «ОК» и выполнить mv $file $src

Если не, то вывести сообщение «error»

По статьям попробовал выполнить


if [ $? -ne 0 ]; then
echo ERROR
else
echo OK
fi



но при любом раскладе выдаёт "ОК"

maxim2049
() автор топика

Не путайте людей, замените теги на [bash]

Deleted
()
Ответ на: комментарий от maxim2049

Ну тебе всё уже написали, что нужно знать.

Берёшь и

Если команда выполнилась успешно, то соответственно необходимо вывести сообщение «ОК» и выполнить mv $file $src

как есть записываешь на баше:

if put ....; then
  echo ok
  mv $file $src
else
  echo error
fi
legolegs ★★★★★
()
Ответ на: комментарий от legolegs

Код выглядит вот так, если вставлять по вашей рекомендации, то всё ломается


ftp -n $HOST $PORT <<EOF
quote user $USER
quote pass $PASS
cd Upload/folder
pwd
lcd $LOCAL_FOLDER
put $file
quit
EOF
maxim2049
() автор топика
Ответ на: комментарий от maxim2049

Не ломается, просто из-за того, что после EOF нельзя ничего писать надо использовать форму

if programm
then

вместо

if programm;then

вот так:

if ftp -n $HOST $PORT <<EOF
quote user $USER
quote pass $PASS
cd Upload/folder
pwd
lcd $LOCAL_FOLDER
put $file
quit
EOF
 then
  echo ok
  mv $file $src
else
  echo error
fi
legolegs ★★★★★
()
Ответ на: комментарий от maxim2049

Я не знаю, что это за клиент. Можно попробовать что-нибудь типа такого

curl -T "${file}" ftp://$USER:$PASS@$HOST:$PORT/Upload/folder/
anonymous
()
Ответ на: комментарий от legolegs

Проверил, то же самое, возвращает ОК в любом случае

maxim2049
() автор топика
Ответ на: комментарий от maxim2049

Хороший вопрос. Ошибка происходит при команде put, а выходит ftp при quit которая выполняется успешно.

Мне кажется, простое решение - сменить инструмент, например

curl -T my-local-file.txt ftp://ftp.example.com/dir/ --user user:secret

Чтобы не светить secret (пароль) в списке процессов лучше засунуть его в .netrc (и ftp и curl могут его оттуда брать).

Кстати, почему не используете curlftpfs?

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от legolegs

С curl ранее пробовал, но все варианты, которые нашёл в интернете, приводили к ошибке curl: (67) Access denied: 530

Ваш вариант эту ошибку не выдал, но ведёт терминал себя странно. Начало тикать время и спустя 2 минуты выдало сообщение curl: (56) Recv failure: Connection reset by peer

От решения с curlftpfs отказался, т.к. необходимо, что бы скрипт был гибким и в любой момент можно было войти и поправить в нём параметры (адреса, лог пасс и т.д.)

maxim2049
() автор топика
Ответ на: комментарий от legolegs

При выполнении скрипта получаю информацию:

Copying files to ftp server: Processing file: file.zip Verbose mode on. 331 Password required 230 User logged in. 250 CWD command successful. Local directory now /Folder/_folder local: file.zip remote: file.zip 227 Entering Passive Mode (217,147,30,186,245,11). 125 Data connection already open; Transfer starting. 226 Transfer complete. 30954451 bytes sent in 1.2 secs (25846.90 Kbytes/sec) 221 Goodbye. Processing file: file.zip

Реально ли выдрать 226 код, а далее уже работать с mv? Был 226 код, выполняем mv Не нашёл, выводим «Ошибка»

maxim2049
() автор топика
Ответ на: комментарий от maxim2049

Вроде бы нашёл ответ на свой вопрос


ftp -n $HOST $PORT <<EOF | tee  $LOG_FILE
verbose
quote user $USER
quote pass $PASS
cd Upload/stepanov
lcd $LOCAL_FOLDER
put $file
quit
EOF


FTP_SUCCESS_MSG="226 Transfer complete"
if fgrep "$FTP_SUCCESS_MSG" $LOG_FILE ;then
   echo "ftp OK"
else
   echo "ftp Error: "$OUT
fi
exit 0


Ответ выдаёт корректно, но попытался совместить с командой mv, получил ошибку синтаксиса. Что не так сделал?

FTP_SUCCESS_MSG="226 Transfer complete"
if fgrep "$FTP_SUCCESS_MSG" $DEBUG_FTP ;then
   echo "FTP Copying Comlete">> $LOG_FILE;
   echo "Moving" >> $LOG_FILE;
        mv $file $SRC 2>/dev/null;
else
   echo "ftp Error: ">> $LOG_FILE;
   echo "Move Error" >> $LOG_FILE;
fi
exit 0
maxim2049
() автор топика
Ответ на: комментарий от maxim2049

Реально ли выдрать 226 код, а далее уже работать с mv? Был 226 код, выполняем mv Не нашёл, выводим «Ошибка»

Вам зачем именно этот «226» ? curl или завершиться с ошибкой или 0 в случае успеха.

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.