У меня есть скрипт 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
По какой-то причине это работает.