У меня есть сценарий OpenSSH sftp
, который передает файлы с сервера SFTP (Solaris) на сервер приложений (Linux). Здесь сценарий - передача происходит из разных мест, и одни и те же файлы передают резервное копирование на другое место SFTP-сервера. Но если какая-либо из передач не выполняется из-за того, что файл недоступен, он не продолжает оставшиеся команды sftp
. Вместо этого он просто выходит из кода. Ниже приведен сценарий.Сценарий sftp, если один из операторов sftp не работает в Linux
export SSHPASS=*******
/usr/local/bin/sshpass -e sftp -oPort=22 -oBatchMode=no -b - [email protected] << !
cd /home/rkwlahtt/Inbound
mget *.*
rm *.*
cd /home/rkwlahtt/Inbound/Adhoc
mget *.*
rm *.*
cd /home/rkwlahtt/Archive/Inbound
mput *.TXT
mput *.txt
cd /home/rkwlahtt/Archive/Adhoc
mput *.xlsx
bye
!
Здесь в приведенном выше сценарии, когда я пытаюсь mget
из /home/rkwlahtt/Inbound
папки и если файл не существует, он просто выходит из sftp
кода вместо того, чтобы идти к следующей команде, которая cd /home/rkwlahtt/Inbound/Adhoc
и mget
. Это та же ситуация, в то время как mput
тоже.
Это первый раз, когда мы переходим из разных мест в том же коде. И это создает проблему в нашей передаче.
Пожалуйста, дайте мне знать, что можно сделать для решения этой проблемы.
Прохладный. Это сработало. Так что же означает -b -. Я думал, что -b был для пакетного файла. И это заявление строки /usr/local/bin/sshpass -e sftp -oPort = 22 -oBatchMode = no -b - [email protected] < user3441224
'-b' делает две вещи. Сначала он включает пакетный режим (= прерывание любой ошибки), во-вторых, он устанавливает файл сценария. За исключением случаев, когда вы используете '-' вместо имени файла сценария, в этом случае команды считываются со стандартного ввода, что по умолчанию. Вам не нужен второй эффект (поскольку вы все равно используете '-'), и вы не хотите первого. См. Страницу man 'sftp': https://www.freebsd.org/cgi/man.cgi?query=sftp&sektion=1 –
в порядке .. Большое спасибо Мартину. – user3441224