Como enviar vários comandos para o sftp usando uma linha

12

O seguinte comando envia um comando para sftp usando uma linha:

sftp -o PasswordAuthentication=no user@host" <<<"lcd /home"

Como enviar várias linhas para sftp usando uma linha. Existe uma maneira de inserir retornos de carro ou algo para conseguir isso, por exemplo:

sftp -o PasswordAuthentication=no user@host" <<<"lcd /home\n cd /myhome\n get file"

A idéia é NÃO usar a opção sftp -b onde um comando externo de listagem de arquivos é carregado.

    
por Radnaskela Samot 08.11.2012 / 14:51

5 respostas

11

Da sintaxe here-string ( <<< ) que você usou, eu suponho que seu shell é bash , então você também pode usar string com caracteres de escape de barra invertida ( $'' ):

sftp -o PasswordAuthentication=no user@host <<< $'lcd /home\n cd /myhome\n get file'

A alternativa portátil é aqui-documento:

sftp -o PasswordAuthentication=no user@host <<END
lcd /home
cd /myhome
get file
END
    
por 08.11.2012 / 15:51
7

Use a opção -b/--batchfile para ter o tratamento adequado de erros:

 printf '%s\n' 'lcd /home' 'cd /myhome' 'get file' | sftp -b - user@host
    
por 08.11.2012 / 23:33
2

Sim, você pode usar apenas echo -e

echo -e "lcd /home\ncd /myhome\nget file" | sftp user@host
    
por 08.11.2012 / 15:43
1

Não é necessário evitar a opção -b para evitar gravar o arquivo em lote no disco. Usando a substituição de processos , você pode criar o lote imediatamente.

batch() {
  echo lcd /home
  echo cd /myhome
  echo get file
}

sftp -b <(batch) -o PasswordAuthentication=no user@host
    
por 18.01.2017 / 11:38
0

Use o comando sftp nativo

sftp -o PasswordAuthentication=no user@host:/home/myhome/file

    
por 19.12.2013 / 01:55