Apa artinya 2> / dev / null?


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.


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

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).


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.


Ringkas dan sesuai topik. Jawaban yang bagus.
— Sergiy Kolodyazhnyy
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.