Деякий час тому я створив сценарій, і я додав кілька журналів навколо нього, але забув, як працює перенаправлення для ведення журналу :-(
Суть її полягає в:
#!/bin/bash
LOGFILE=/some/path/mylogfile
(
# here go my commands which produce some stdout
# and, if something goes wrong, also some stderr
) 1>>${LOGFILE} 2> >( tee -a ${LOGFILE} >&2 )
Коли я запускаю сценарій, він нічого не друкує stdout
, а лише друкує те, що йде stderr
. Logfile ${LOGFILE}
фіксує як stdout, так і stderr.
Коли я запускаю скрипт і на своєму терміналі немає виводу, тоді я знаю, що все добре. Якщо є вихід, я знаю, що щось пішло не так, і я можу перевірити файл журналу, щоб дізнатися, у чому проблема.
Частина перенаправлення, яка зараз мене спантеличує, - це синтаксис: 2> >( some command )
Хтось може пояснити, що там відбувається?
echo <(date)
, це дає мені ім'я заміщає файлу:/dev/fd/63
. Якщо я виконуюcat <(date)
, це дає мені дату, тобто зміст заміщає файлу:Fri Nov 18 14:11:09 NZDT 2016
.