1行でsftpに複数のコマンドを送信する方法

1行でsftpに複数のコマンドを送信する方法

次のコマンドは、sftp1行を使用してコマンドを送信します。

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

sftp1行を使用して複数行を送信する方法。これを達成するためにキャリッジリターンや何かを挿入する方法はありますか?たとえば、次のようになります。

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

アイデアは、sftp -bコマンドをリストする外部ファイルをロードするオプションを使用しないことです。

答え1

使用しているhere-string()構文から<<<シェルがあると推測されるため、bashバックスラッシュエスケープ文字でstring()を使用することもできます$''

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

関連情報