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.