カールの出力をファイルにコピー

カールの出力をファイルにコピー

私は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

カールは状態をstdoutの代わりにstderrとして印刷します。同じファイルからstderrをキャプチャするには、次のように追加してstderrをstdoutにリダイレクトする必要があります。2>&1 後ろに標準出力リダイレクト:

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

2>&1stdoutとstderrをよりよく理解するのに役立つ考えを刺激する質問について...なぜ初期>>ではなく初期の後にあるのですか?

答え2

標準出力(stdout)とは異なるストリームである標準エラー(stderr)への出力が表示されることがあります。

ターゲットを出力した後、リダイレクトに2>&1を使用できます。

たとえば、

$curl -T /home/pi/fb/$DATE.jpg ftp://myftpサーバー--ユーザー myuser:mypass >> /home/pi/fb/log.txt 2>&1

関連情報