Beberapa waktu yang lalu saya membuat skrip dan menambahkan beberapa logging di sekitarnya, tapi saya lupa bagaimana redirection untuk logging bekerja :-(
Intinya adalah:
#!/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 )
Saat saya menjalankan skrip, skrip tidak mencetak apa pun stdout
, tetapi hanya mencetak apa yang terjadi stderr
. Logfile ${LOGFILE}
menangkap stdout dan stderr.
Ketika saya menjalankan skrip dan tidak ada output di terminal saya, maka saya tahu semuanya baik-baik saja. Jika ada output, saya tahu ada yang salah dan saya bisa memeriksa logfile untuk mencari tahu apa masalahnya.
Bagian dari pengalihan yang sekarang membingungkan saya adalah sintaks: 2> >( some command )
Adakah yang bisa menjelaskan apa yang terjadi di sana?
echo <(date)
, itu memberi saya nama file diganti:/dev/fd/63
. Jika saya jalankancat <(date)
, itu memberi saya tanggal, yaitu isi dari file diganti:Fri Nov 18 14:11:09 NZDT 2016
./dev
adalah nama untuk pipa di antara proses.tee
, dalam kasus ini)?tee
stderr dan memisahkannya dari stdout.