Esta é uma pergunta muito básica, sou bastante nova no bash e não consegui descobrir como fazer isso. Infelizmente, pesquisar no Google não me levou a lugar algum.
Meu objetivo é conectar-se ao sftp em um servidor, carregar um arquivo e desconectar.
Eu tenho o seguinte script:
UpdateJar.sh
#!/bin/bash
sftp -oPort=23 [email protected]:/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
o problema é que esse script estabelecerá uma conexão sftp e não fará nada. Depois de digitar manualmente exit em conexão, ele tenta executar o comando put, mas como a sessão sftp foi fechada, apenas diz put: command not found.
Como faço para que isso funcione corretamente?
obrigado
Respostas:
Você pode alterar seu script para passar comandos em um documento aqui, por exemplo,
O
<<
marcador seguido pelo nome (EOF
) diz ao script para passar as seguintes linhas até que o nome seja encontrado no início da linha (por si só).fonte
Você pode preferir usar em
scp
vez desftp
.scp
comporta-se como o comumcp
comando , mas os arquivos podem ser remotos:Isso copia o arquivo na sua máquina local para um diretório na máquina remota sem precisar usar a interface de comando antiga do estilo ftp.
Os
ssh
,scp
esftp
serviços são geralmente disponíveis se algum deles são; o mesmo programa daemon fornece todos eles simultaneamente. Em princípio, o administrador do servidor pode optar por desativar qualquer um deles, mas na prática isso é bastante raro.fonte
scp
já está disponível na minha máquinaVocê também pode usar a
-b
opção desftp
para indicar um arquivo que contém comandos parasftp
.Por exemplo, você pode colocar todos os seus comandos no arquivo
sftp_commands.txt
:e execute
sftp
como:Ou você pode passar os comandos via STDIN também se não quiser usar um arquivo.
A partir de
man sftp
:fonte
Outra opção seria usar curl :
fonte