如何使用一行发送多个命令到 sftp

如何使用一行发送多个命令到 sftp

以下命令sftp使用一行发送一个命令:

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

如何sftp使用一根线发送多条线。有没有办法插入回车符或其他东西来实现这一点,例如:

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

这个想法是不使用sftp -b加载列出命令的外部文件的选项。

答案1

从您使用的here-string ( <<<)语法来看,我猜您的shell是bash,因此您还可以使用带有反斜杠转义字符的字符串( $''):

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

便携式替代方案是此处文档:

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

答案2

使用该-b/--batchfile选项进行正确的错误处理:

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

答案3

是的,你可以使用echo -e

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

答案4

Mybru,你可以像这样通过管道传输你的命令:

echo '
    lcd /home
    cd /myhome
    get file
' | sftp -o PasswordAuthentication=no user@host

相关内容