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

Rad*_*mot 15 scripting sftp

以下命令将一个命令发送到sftpusing 一行:

sftp -o PasswordAuthentication=no user@host" <<<"lcd /home"
Run Code Online (Sandbox Code Playgroud)

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

sftp -o PasswordAuthentication=no user@host" <<<"lcd /home\n cd /myhome\n get file"
Run Code Online (Sandbox Code Playgroud)

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

man*_*ork 13

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

sftp -o PasswordAuthentication=no user@host <<< $'lcd /home\n cd /myhome\n get file'
Run Code Online (Sandbox Code Playgroud)

便携式替代方案是here-document:

sftp -o PasswordAuthentication=no user@host <<END
lcd /home
cd /myhome
get file
END
Run Code Online (Sandbox Code Playgroud)


Sté*_*las 9

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

 printf '%s\n' 'lcd /home' 'cd /myhome' 'get file' | sftp -b - user@host
Run Code Online (Sandbox Code Playgroud)


uto*_*und 2

是的,你可以使用echo -e

echo -e "lcd /home\ncd /myhome\nget file" | sftp user@host
Run Code Online (Sandbox Code Playgroud)

  • `echo` 非常不标准 - `echo -e` 并不是在任何地方都一样工作,所以你必须首先检查。或者,只需使用“printf”,它更便携并且在任何地方都应该工作相同。 (4认同)