
私は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>&1
stdoutとstderrをよりよく理解するのに役立つ考えを刺激する質問について...なぜ初期>>
ではなく初期の後にあるのですか?
答え2
標準出力(stdout)とは異なるストリームである標準エラー(stderr)への出力が表示されることがあります。
ターゲットを出力した後、リダイレクトに2>&1を使用できます。
たとえば、
$curl -T /home/pi/fb/$DATE.jpg ftp://myftpサーバー--ユーザー myuser:mypass >> /home/pi/fb/log.txt 2>&1