Некоторое время назад я сделал сценарий и добавил некоторые записи в журнал, но я забыл, как работает перенаправление для ведения журнала :-(
Суть этого такова:
#!/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}
захватывает как stdout, так и stderr.
Когда я запускаю скрипт и на моем терминале нет вывода, я знаю, что все в порядке. Если есть какой-либо вывод, я знаю, что что-то пошло не так, и я могу проверить файл журнала, чтобы выяснить, в чем проблема.
Часть перенаправления, которая сейчас озадачивает меня, - это синтаксис: 2> >( some command )
Кто-нибудь может объяснить, что там происходит?
echo <(date)
, это дает мне имя замещаемого файла:/dev/fd/63
. Если я исполняюcat <(date)
, это дает мне дату, то есть содержание замещаемого файла:Fri Nov 18 14:11:09 NZDT 2016
.