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 .