将curl 的输出复制到文件

将curl 的输出复制到文件

我正在运行 raspbian 并使用这个 bash 脚本每分钟拍摄一张照片并将其上传到我的 FTP 服务器:

#!/bin/bash

while [ 1 ]; do
 DATE=$(date +"%Y-%m-%d_%H_%M_%S")
 raspistill -q 10 -th none -o /home/pi/fb/$DATE.jpg
 curl -T /home/pi/fb/$DATE.jpg  ftp://myftpserver --user myuser:mypass >> /home/pi/fb/log.txt
 sleep 60
 echo finished $DATE >> /home/pi/fb/log.txt
done

我希望 的输出curl出现在log.txt文件中,但它总是打印到控制台。这是为什么?我也尝试使用tee但这并没有改变任何东西。

答案1

curl 将其状态打印到 stderr 而不是 stdout。要在同一文件中捕获 stderr,您需要通过添加以下内容将 stderr 重定向到 stdout2>&1 你的标准输出重定向:

curl -T /home/pi/fb/$DATE.jpg  ftp://myftpserver --user myuser:mypass >> /home/pi/fb/log.txt 2>&1

对于一个发人深省的问题,它将帮助您更好地理解 stdout 和 stderr...为什么必须2>&1在初始之后>>而不是之前?

答案2

您可能会看到标准错误 (stderr) 的输出,它是与标准输出 (stdout) 不同的流。

可以在输出目的地后使用 2>&1 进行重定向。

例如:

$curl -T /home/pi/fb/$DATE.jpg ftp://myftp服务器--用户 myuser:mypass >> /home/pi/fb/log.txt 2>&1

相关内容