1行を使用して複数のコマンドをsftpに送信する方法


14

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

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コマンドをリストする外部ファイルがロードされるオプションを使用しないことです。

回答:


12

使用したhere-string(<<<)構文から、シェルは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

1
<<<(最初はzshに触発されましたがrc)最初に導入され、後にksh93に追加され、次にbashに追加されました。
ステファンシャゼル

@StephaneChazelas、ありがとうございます。本当にzshスキルを強化する必要があります。
マナトワーク


2

はい、使用できます echo -e

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

3
echo非常に非標準です- echo -eどこでも同じように動作しないので、最初に確認する必要があります。あるいは、printfはるかに移植性が高く、どこでも同じように動作するはずのuse を使用します。
jw013

1

-bバッチファイルのディスクへの書き込みを回避するオプションを回避する必要はありません。プロセス置換を使用すると、その場でバッチを作成できます。

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

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

0

ネイティブsftpコマンドを使用

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


あなたが気づかなかったのはそれlcdcdあり、異なることをします。パスを、存在しないものに結合しただけです。
underscore_d

0

Mybru、次のようにコマンドをmos pipeすることができます:

echo '
    lcd /home
    cd /myhome
    get file
' | sftp -o PasswordAuthentication=no user@host
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.