Bash
將 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
,但這並沒有改變任何東西。
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