我有一个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 << !
所有这些都只是返回我发送到远程服务器的命令。我没有看到来自服务器的任何响应。当我使用上述任何一种方式从命令行运行脚本时,我可以在屏幕上看到响应。
有人有什么建议吗?
更新
尽管不完美,但我接受了Lars Kotthoff的答案,基于他的答案和我们在评论中的讨论,我找到了解决方法。这就是我所做的:
首先,我将sftp命令移动到名为“sftp_commands”的外部文件中。
echo $(cat sftp_commands | sshpass -pABC123 sftp user@host.com 2>&1) >> sftp.log
因为某种原因那样就有效了。