我通过 sftp 连接到服务器,我想下载文件并将所有信息重定向到文件。我有一个 bash 脚本可以执行此操作,并且它运行良好,但是当我收到错误消息(例如,不存在文件)时,它不会将错误消息写入文件,而是将它们显示在屏幕上。如何将错误消息写入文件?
我试过了,但没什么区别
sftp -i id_rsa -P 22 root@myserver<<EOF >> output.log 2>> errfile.txt
这是我的代码:
#!/bin/bash
sftp -i id_rsa -P 22 root@myserver<<EOF >> output.log
get SomeFiles*
quit
EOF
如果没有文件,屏幕上就会显示以下内容。
Connected to myserver.
File "/tmp/SomeFiles*" not found.
有没有办法将所有错误消息重定向到文件而不是让它们显示在屏幕上?
答案1
我遇到了同样的 SFTP 错误问题。唯一可行的方法(至少在我的环境中:RHL7)是使用批处理文件执行 sftp:
#!/bin/bash
log_file=output.log
err_file=errfile.txt
#redirect proc output to output.log
exec >> $log_file
echo "get SomeFiles*" > /somefolder/sftp_batch.txt
#redirect sftp errors to errfile.txt
sftp -i id_rsa -P 22 -b /somefolder/sftp_batch.txt root@myserver 2>> $err_file
或者,如果您不需要将错误放在单独的文件中,则可以替换最后一行:
sftp -i id_rsa -P 22 -b /somefolder/sftp_batch.txt root@myserver 2>> $err_file
和
sftp -i id_rsa -P 22 -b /somefolder/sftp_batch.txt root@myserver 2>> $log_file
然后它将 proc 输出和 sftp 错误消息写入一个文件。