【发布时间】:2012-04-04 07:28:06
【问题描述】:
我有一个通过 SFTP 上传文件的 bash 脚本,命令如下:
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 的答案,尽管它并不完美,但根据他的答案以及我们在 cmets 中对他的答案的讨论,我想通了。这就是我所做的:
首先我将 sftp 命令移动到一个名为“sftp_commands”的外部文件中
echo $(cat sftp_commands | sshpass -pABC123 sftp user@host.com 2>&1) >> sftp.log
出于某种原因,它有效。
【问题讨论】: