Bash: Вывод команды записывается только на экран, а не в другой файл при использовании tee, в чем может быть причина?

Для того, чтобы устранить некоторые ошибки подключения FTP, я получил указание написать скрипт bash, который будет бесконечно подключаться к удаленному серверу FRP и получать оттуда один файл.

ftpuser="ftpuser" 
ftppasswd="ftppasswd" 
ftpsrv="download.akamai.com" 
log="/var/log/test_ftp_akamai.log" 
function print_log { 
        echo $(date +'%d-%m-%y %H:%M:%S') $* >> $log 
} 

while true 
do print_log "-----===== Start =====------" | tee -a $log 
/usr/bin/wget ftp://$ftpuser:$ftppasswd@$ftpsrv | tee -a $log 
sleep 2 | tee -a $log 
print_log "-----===== Done =====------" | tee -a $log 
done

Скрипт работает правильно, но вывод wget строка, которая выводится на экран, также должна быть teeзаписано в журнал, но по какой-то причине только оно не записывается в журнал.

Пример:

[root@sjorigin1 ~]# tailf /var/log/test_ftp_akamai.log 
25-02-15 02:10:31 -----===== Start =====------
25-02-15 02:10:33 -----===== Done =====------
25-02-15 02:10:33 -----===== Start =====------
25-02-15 02:10:35 -----===== Done =====------

Можете ли вы найти причину того, что она не записана в журнал?

Заранее спасибо,

1 ответ

Решение

Причина в том, что хотя echo заявления идут в STDOUTи, таким образом, отправляется через трубу tee"вывод" вы видите из wget команда включена STDERR, который не делает.

Это не проходит через канал по умолчанию, как вы уже видели, tty вместо. Если вы хотите отправить оба STDOUT а также STDERR к трубе STDIN, вы должны использовать |&например,

/usr/bin/wget ftp://$ftpuser:$ftppasswd@$ftpsrv |& tee -a $log

Это работает в bash и tcsh, если память не изменяет. Для болотного стандарта sh это немного больше работы, но все еще можно сделать (хотя я не могу вспомнить, как это происходит).

Изменить (Энтони, чей комментарий следует; спасибо! - MadHatter):

Синтаксис для POSIX-совместимых оболочек (должен также работать для sh) было бы:

/usr/bin/wget ftp://$ftpuser:$ftppasswd@$ftpsrv 2>&1 | tee -a $log
Другие вопросы по тегам