Як надіслати кілька команд sftp за допомогою одного рядка


14

Наступна команда посилає одну команду на 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параметр, куди завантажуються зовнішні команди з переліком файлів.

Відповіді:


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що набагато портативніше, і воно повинно працювати однаково скрізь.
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 = немає користувача @ хост: / home / myhome / file


Те, що ви не помічали, це робити lcdі cdробити різні речі. Ви просто поєднали стежки у щось, чого не буде.
підкреслюйте_d

0

Mybru, ти можеш передавати команди так:

echo '
    lcd /home
    cd /myhome
    get file
' | sftp -o PasswordAuthentication=no user@host
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.