Copie a saída da curvatura para o arquivo

1

Estou correndo raspbian e usando este script para tirar uma foto a cada minuto e fazer o upload para o meu servidor 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

Eu quero que a saída de curl apareça no arquivo log.txt , mas é sempre impressa no console. Por que é que? Eu também tentei usar tee , mas isso não mudou nada.

    
por Simon 02.02.2016 / 17:39

2 respostas

3

curl imprime seu status para stderr em vez de stdout. Para capturar stderr no mesmo arquivo, você precisa redirecionar stderr para stdout adicionando 2>&1 DEPOIS do redirecionamento do stdout:

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

Para uma pergunta instigante que o ajudará a entender melhor o stdout e o stderr ... por que o 2>&1 deve estar após o >> inicial em vez de antes?

    
por 02.02.2016 / 17:57
0

Você provavelmente está vendo a saída para o erro padrão (stderr), que é um fluxo separado da saída padrão (stdout).

Ele pode ser redirecionado com 2 > & 1 após o destino de saída.

Por exemplo:

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

    
por 02.02.2016 / 17:50