Bash

將 curl 的輸出複製到文件

  • February 2, 2016

我正在執行 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,但這並沒有改變任何東西。

curl 將其狀態列印到 stderr 而不是 stdout。要在同一文件中擷取 stderr,您需要通過在 stdout 重定向2>&1 之後添加來將 stderr 重定向到 stdout :

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

對於一個可以幫助您更好地理解 stdout 和 stderr 的發人深省的問題……為什麼必須2>&1在首字母之後>>而不是之前?

您可能會看到標準錯誤 (stderr) 的輸出,它是與標準輸出 (stdout) 分開的流。

它可以在輸出目的地之後用 2>&1 重定向。

例如:

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

引用自:https://unix.stackexchange.com/questions/259367