Come inviare più comandi a sftp usando una riga


14

Il seguente comando invia un comando sftpall'utilizzo di una riga:

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

Come inviare più righe sftpall'utilizzo di una riga. C'è un modo per inserire i ritorni a capo o qualcosa per raggiungere questo obiettivo, ad esempio:

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

L'idea è di NON utilizzare l' sftp -bopzione in cui sono caricati i comandi di un elenco di file esterni.

Risposte:


12

Dalla <<<sintassi here-string ( ) che hai usato suppongo che la tua shell sia bash, quindi puoi anche usare string con caratteri con backslash ( $''):

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

L'alternativa portatile è qui-documento:

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

1
<<<fu introdotto prima da zsh (sebbene ispirato da rc) e fu successivamente aggiunto a ksh93 e poi bash.
Stéphane Chazelas,

Grazie, @StephaneChazelas. Ho davvero bisogno di rafforzare le mie zshcapacità.
arte

8

Utilizzare l' -b/--batchfileopzione per gestire correttamente gli errori:

 printf '%s\n' 'lcd /home' 'cd /myhome' 'get file' | sftp -b - user@host

1
Per usare le variabili cambia "in"
Radnaskela Samot il

2

Sì, puoi semplicemente usare echo -e

echo -e "lcd /home\ncd /myhome\nget file" | sftp user@host

3
echoè molto non standard - echo -enon funziona allo stesso modo ovunque, quindi dovresti controllare prima. In alternativa, basta usare quello printfche è molto più portatile e dovrebbe funzionare lo stesso ovunque.
jw013,

1

Non è necessario evitare l' -bopzione per evitare di scrivere il file batch sul disco. Utilizzando la sostituzione del processo è possibile creare il batch al volo.

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

sftp -b <(batch) -o PasswordAuthentication=no user@host

0

Usa il comando sftp nativo

sftp -o PasswordAuthentication = nessun utente @ host: / home / myhome / file


Quello che non hai notato è stato lcde cdfare cose diverse. Hai appena combinato i percorsi in qualcosa che non esisterà.
underscore_d

0

Mybru, puoi inoltrare i tuoi comandi in questo modo:

echo '
    lcd /home
    cd /myhome
    get file
' | sftp -o PasswordAuthentication=no user@host
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.