Ini tidak masuk akal bagi saya.
wibble > /dev/null 2>&1
Saya pikir akan lebih masuk akal jika itu seperti ini:
wibble 2>&1 > /dev/null
Dengan kata lain
Commands Output Sendall STDERRORS to STDOUT then SEND it all to /dev/null
Apa pemikiran di balik urutan pengalihan perintah xxx > /dev/null 2>1 ?
Jawaban yang Diterima:
Pengalihan diproses dari kiri ke kanan. Jika Anda melakukannya
2>&1 1> /dev/null
Pengalihan pertama membuat stderr arahkan ke aliran yang stdout menunjuk pada waktu itu (yang pada dasarnya adalah tty Anda). Itu tidak membuat stderr alias stdout .
Kemudian stdout diarahkan ke ember bit. stdout redirect tidak mempengaruhi stderr sebelumnya mengalihkan. stderr masih mengacu pada tty Anda.
Jadi:
ls file_that_doesnt_exist 2>&1 1> /dev/null
hanya akan mencetak pesan kesalahan pada terminal Anda.
bash halaman dokumentasi redirection menyebutkan ini secara eksplisit:
Perhatikan bahwa urutan pengalihan itu penting. Misalnya, perintah
ls > dirlist 2>&1
mengarahkan output standar dan kesalahan standar ke direktori file, sedangkan perintah
ls 2>&1 > dirlist
mengarahkan hanya output standar ke file dirlist, karena kesalahan standar diduplikasi dari output standar sebelum output standar dialihkan ke dirlist .