Это очень простой вопрос, я просто новичок в bash и не могу понять, как это сделать. Погуглить, к сожалению, никуда меня не привело.
Моя цель - подключиться к серверу с помощью sftp, загрузить файл, а затем отключиться.
У меня есть следующий скрипт:
UpdateJar.sh
#!/bin/bash
sftp -oPort=23 kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins
#Change directory on server
#cd /home/kalenpw/TestWorld/plugins
#Upload file
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar
exit
проблема в том, что этот скрипт установит соединение sftp, а затем ничего не сделает. Когда я вручную набираю exit в соединении, он пытается выполнить команду put, но поскольку сессия sftp закрыта, он просто говорит: команда: не найдена.
Как я могу заставить это работать должным образом?
Благодарность
Ответы:
Вы можете изменить свой скрипт для передачи команд в здесь-документе, например,
<<
Маркер следует имя (EOF
) говорит сценарию пройти следующие строки до тех пор , пока имя не будет найдено в начале строки (сам по себе).источник
Вы можете предпочесть использовать
scp
вместоsftp
.scp
ведет себя так же, как обычнаяcp
команда, но файлы могут быть удаленными:При этом файл на локальном компьютере копируется в каталог на удаленном компьютере без использования старого командного интерфейса в стиле ftp.
В
ssh
,scp
иsftp
услуги, как правило , доступны , если любой из них; одна и та же программа-демон предоставляет их все одновременно. В принципе, администратор сервера может отключить любой из них, но на практике это происходит довольно редко.источник
scp
уже доступен на моей машинеВы также можете использовать
-b
опцию,sftp
чтобы указать файл, содержащий команды дляsftp
.Например, вы можете поместить все свои команды в файл
sftp_commands.txt
:и запустить
sftp
как:Или вы можете передавать команды через STDIN, если вы не хотите использовать файл.
От
man sftp
:источник
Другой вариант будет использовать curl :
источник