GNU/Linux >> Belajar Linux >  >> Linux

Mengapa Mengarahkan Stderr Ke /dev/null Dilakukan Dengan Cara Ini?

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 .


Linux
  1. Bagaimana cara menyandikan base64 /dev/random atau /dev/urandom?

  2. Linux:Perbedaan antara /dev/console , /dev/tty dan /dev/tty0

  3. kernel:menonaktifkan /dev/kmem dan /dev/mem

  1. Bagaimana Linux menggunakan /dev/tty dan /dev/tty0

  2. Mengapa < atau > diperlukan untuk menggunakan /dev/tcp

  3. Buat perangkat blok virtual yang menulis ke /dev/null

  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Linux:Perbedaan Antara /dev/console , /dev/tty Dan /dev/tty0?

  3. Seberapa Portabel /dev/stdin, /dev/stdout Dan /dev/stderr?