код возврата sftp - PullRequest
       8

код возврата sftp

4 голосов
/ 13 апреля 2011

Я нашел сайт для этой проблемы, но не смог найти решение. Проблема связана с sftp. Я запускаю скрипт, который принимает 7 параметров, выполняет SSH и загружает файл на сервер sftp. Параметры, которые я предоставляю, являются сервером, пользователем, port, source_directory, target_directory, source_file и tager_file.если все идет хорошо, файл загружается без ошибок и код возврата равен 0. Проблема в том, что если какой-либо параметр неверен, например target_directory, даже тогда скрипт возвращает 0 в качестве возвращаемого значения. Вот как выглядит скрипт -

   typeset targetUsername=$1

typeset targetHostname=$2

typeset sftpPort=$3

typeset sourceDir=$4

typeset targetDir=$5

typeset sourceFilename=$6

typeset targetFilename=$7

typeset cmdPut="put ${sourceDir}/${sourceFilename} ${targetTempDir}/${tmpFileNam
e}"

typeset cmdRen="rename ${targetTempDir}/${tmpFileName} ${targetDir}/${targetFile
name}"

sftp ${sftpOption} ${targetUsername}@${targetHostname} <<EOF

${cmdPut}

${cmdRen}

bye
EOF

sftpStatus=$?

sftpStatus должен возвращать статус. Но я всегда получаю статус 0.Есть идеи, как это восстановить?Большое спасибо заранее.

1 Ответ

8 голосов
/ 13 апреля 2011

Вам нужно запустить sftp в пакетном режиме, поместив ваши команды в файл и передав их sftp. Затем вы получите код выхода 1 в случае сбоя и 0 для успеха.

Вот пример кода:

# create a temporary file containing sftp commands
BATCH_FILE="/tmp/$(basename $0).$$.tmp"
echo ${cmdPut} > ${BATCH_FILE}
echo ${cmdRen} >> ${BATCH_FILE}

# run sftp in batch mode
sftp -b ${BATCH_FILE} ${sftpOption} ${targetUsername}@${targetHostname} 
sftpStatus=$?

rm ${BATCH_FILE}
...