Jakiś czas temu stworzyłem skrypt i dodałem trochę logowania, ale zapomniałem, jak działa przekierowanie do logowania :-(
Jego istotą jest:
#!/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 )
Po uruchomieniu skryptu nic nie drukuje stdout
, ale drukuje tylko to, co się dzieje stderr
. Plik dziennika ${LOGFILE}
przechwytuje zarówno stdout, jak i stderr.
Kiedy uruchamiam skrypt i na terminalu nie ma danych wyjściowych, wiem, że wszystko jest w porządku. Jeśli jest jakiś wynik, wiem, że coś poszło nie tak i mogę sprawdzić plik dziennika, aby dowiedzieć się, na czym polega problem.
Część przekierowania, która mnie teraz zastanawia, to składnia: 2> >( some command )
Czy ktoś może wyjaśnić, co się tam dzieje?
echo <(date)
, to daje mi nazwę podstawionego pliku:/dev/fd/63
. Jeśli mogę wykonaćcat <(date)
, to daje mi datę, czyli zawartość podstawionym pliku:Fri Nov 18 14:11:09 NZDT 2016
.