Как отправить несколько команд в 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делать разные вещи. Вы только что объединили пути в то, чего не будет.
underscore_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.