Как перенаправить вывод после многострочного перенаправления для ввода в bash? - PullRequest
2 голосов
/ 19 марта 2012

У меня есть скрипт bash, который загружает файл через SFTP с помощью команды, подобной этой:

sshpass -pABC123 sftp user@host.com  << !
   cd data
   put /path/file.txt
   bye
! 

Я получаю уведомление по электронной почте от моего bash-скрипта, когда процесс завершен. Я хотел бы записать фактический вывод этой команды (ответы от сервера или ошибки от sshpass) в переменную или текстовый файл и включить его в свою электронную почту.

Какие есть варианты перенаправления вывода. Я знаю, что могу помещать команды в $ () для захвата их вывода, и я могу также использовать >>, но с многострочным вводом, я не думаю, что они будут работать ...

Я пробовал это:

SFTP_RESULT = (    
   sshpass -pABC123 sftp user@host.com  << !
       cd data
       put /path/file.txt
       bye
    ! 
)

И я тоже попробовал:

sshpass -pABC123 sftp user@host.com  << ! >> /file.txt

и

sshpass -pABC123 sftp user@host.com >> /file.txt << ! 

Все это просто возвращает мои команды, которые я отправляю на удаленный сервер. Я не вижу никаких ответов от сервера. Когда я запускаю скрипт из командной строки с любым из вышеперечисленных, я вижу ответы на экране.

У кого-нибудь есть предложения?

UPDATE

Я принял ответ от Ларса Коттоффа , хотя он и не идеален, но на основании его ответа и нашего обсуждения в комментариях к его ответу я понял его. Вот что я сделал:

Сначала я переместил команды sftp во внешний файл с именем "sftp_commands"

echo $(cat sftp_commands | sshpass -pABC123 sftp user@host.com 2>&1) >> sftp.log

По какой-то причине это работает.

Ответы [ 2 ]

1 голос
/ 19 марта 2012

Звучит так, будто вы хотите использовать сценарий ожидайте .Expect должен быть доступен для вашей операционной системы и дистрибутива.

За исключением этого, посмотрите, можете ли вы использовать scp, который часто доступен на серверах, на которых также включен sftp.Это может быть гораздо проще:

scp /path/file.txt user@example.com:data/

Обратите внимание, что, вероятно, лучше установить открытые ключи SSH, чем использовать sshpass.

0 голосов
/ 19 марта 2012

Перенаправляет работу:

$ cat << ! > /tmp/foo
> foo
> bar
> !
$ cat /tmp/foo 
foo
bar
...