Apa artinya 2> / dev / null?

242

Saya ingin penjelasan singkat tentang baris perintah berikut:

grep -i 'abc' content 2>/dev/null 
Naif
sumber

Jawaban:

348

> Operator mengalihkan hasil biasanya ke file tetapi bisa ke perangkat. Anda juga dapat menggunakan >> untuk menambahkan.

Jika Anda tidak menentukan angka maka aliran output standar diasumsikan tetapi Anda juga dapat mengarahkan kesalahan

> filepengalihan stdout ke file
1> filepengalihan stdout ke file
2> filepengalihan stderr ke file
&> filepengalihan stdout dan stderr ke file

/dev/nulladalah perangkat nol yang mengambil input apa pun yang Anda inginkan dan membuangnya. Dapat digunakan untuk menekan output apa pun.

Warren Hill
sumber
6
apakah ada perbedaan antara > /dev/null 2>&1dan&> /dev/null
Alexander Mills
13
Dalam prakteknya hari ini saya tidak berpikir ada 2>&1sintaks yang lebih tua sehingga &>tidak akan bekerja bertahun-tahun yang lalu tetapi keduanya setara.
Warren Hill
28

Singkatnya, pengalihan stderr(fd 2) ke lubang hitam (membuang output dari perintah).

Beberapa kasus penggunaan yang lebih umum untuk pengalihan:

command > /dev/null 2>&1 &

Jalankan commanddi latar belakang, buang stdoutdanstderr

command >> /path/to/log 2>&1 &

Jalankan commanddan tambahkan stdout dan stderr ke file log.

Di Bash 4+, formulir yang lebih pendek (tapi kurang bisa dibaca) berfungsi

command &>> /path/to/log
Terry Wang
sumber
3
Apakah ada alasan yang baik untuk menggunakan > /dev/null 2>&1bukan &> /dev/null?
Craig McQueen
7
@CraigMcQueen &>baru di Bash 4, yang pertama hanya cara tradisional, saya sudah terbiasa (mudah diingat).
Terry Wang
@CraigMcQueen menurut komentar pada jawaban ini , &> /dev/nullmungkin tidak berfungsi di beberapa shell tetapi> / dev / null 2> & 1 akan bekerja di semua shell yang kompatibel dengan POSIX.
Stack Underflow
3
Mengapa 2> & 1 dan bukan 2 & 1> ??
marienbad
1
@marienbad itu sebenarnya pertanyaan yang patut ditayangkan :-) Sintaksnya adalah fn>target, di mana fnnomor file (0-2 biasanya, beberapa program menentukan lebih banyak angka) dan targetbiasanya nama file tetapi di sini adalah nomor file lain - diawali dengan &yang merupakan sintaks untuk "Saya ingin jumlah file bukan nama file".
toolforger
9

/dev/nulldiperlakukan sebagai lubang hitam di Linux / Unix, sehingga Anda dapat memasukkan apa saja ke dalam ini tetapi Anda tidak akan bisa mendapatkannya kembali /dev/null.

Selanjutnya, 2>berarti bahwa Anda mengarahkan ulang (yaitu >) stderr (yaitu 2) ke dalam lubang hitam (yaitu /dev/null)

Perintah Anda adalah:

grep -i 'abc' content 2>/dev/null 

Jangan coba akhiri dengan garis miring lain seperti ini - 2>/dev/null/(ini bukan direktori).

Indrajeet Gour
sumber
2

konten grep -i 'abc' akan menghasilkan output yang ditampilkan di konsol Anda, termasuk kesalahan apa pun.

Menentukan 2>/dev/nullakan menyaring kesalahan sehingga tidak akan keluar ke konsol Anda.

Secara lebih rinci: 2 mewakili deskriptor kesalahan, yang merupakan tempat penulisan kesalahan. Secara default mereka dicetak pada konsol.

\> mengalihkan output ke tempat yang ditentukan, dalam hal ini /dev/null

/dev/null adalah perangkat Linux standar tempat Anda mengirim keluaran yang ingin Anda abaikan.

Mauro Zallocco
sumber
Ringkas dan sesuai topik. Jawaban yang bagus.
Sergiy Kolodyazhnyy