我正在运行 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