Apa artinya "</ dev / null"?


16

Saya mengerti > /dev/nullmengarahkan hal-hal /dev/nullyang bertindak seperti lubang hitam. Namun, saya tidak mengerti apa < /dev/nullartinya. Saya melihat beberapa skrip ditulis seperti ini:

nohup myprogram > foo.out 2> foo.err < /dev/null &

Jadi, apa artinya < /dev/nulldalam kode di atas?

inilah contoh yang disarankan


Jawaban:


19

Ini memastikan bahwa semua aliran I / O dicatat-untuk / ditempati.

Dengan cara ini, proses latar belakang tidak ada yang "terikat" ke terminal sehingga Anda dapat melanjutkan bisnis Anda tanpa program Anda mencoba membaca dari TTY, yang akan menyebabkan terminal hang.

Dalam hal ini, karena Anda meluncurkan proses lebih dari ssh dari skrip shell, itu memastikan bahwa skrip dapat bergerak tanpa terbebani.


Apakah ia menganggap myprogram membutuhkan beberapa input, tetapi dalam hal ini ia tidak memberi makan myprogram sebagai input?
Qian Chen

Terima kasih. Saya mengerti semua yang lain kecuali < /dev/null.
Qian Chen

Jadi apa perbedaan antara kode dan kode yang sama tanpa < /dev/null?
Qian Chen

Saya benar-benar membaca kode dari sini: stackoverflow.com/questions/29142/…
Qian Chen

2
senang itu membantu! maaf tentang alasannya; konteksnya membantu, terima kasih! - catatan tambahan: saya akan menghapus banyak komentar saya dalam satu atau dua menit, sekarang setelah semuanya selesai, itu hanya membingungkan bagi siapa pun yang melihatnya
user3276552

12

program </dev/nullberarti bahwa programmengambil argumen inputnya (dapat menjadi parameter input ke opsi atau dapat menjadi input file untuk beroperasi) melalui deskriptor file 0 yaitu STDIN, dari file /dev/null.

Seperti yang sudah Anda ketahui, /dev/nulltidak mengandung apa pun, itu akan memberi tahu EOF (End of File) setelah dibaca sehingga setiap program yang mengambil input dari /dev/nulldasarnya akan mengarahkan ulang apa pun sebagai argumen inputnya.


Jadi, apakah ada perbedaan untuk pergi begitu saja < /dev/null? Tulis saja sebagainohup myprogram > foo.out 2> foo.err &
Qian Chen

1
@ ElgsQianChen Itu tergantung pada Anda program.. apa yang diinginkannya sebagai STDIN? Beberapa program mungkin mewajibkannya sehingga Anda perlu meletakkan sesuatu sebagai STDIN, ini mungkin terjadi di sini bahwa Anda baru saja menggunakan /dev/nullSTDIN dan membiarkan program melakukan pemrosesan dan memasukkan STDOUT dan STDERR ke dalam file yang disebutkan ..
heemayl

Jadi apakah itu secara efektif mencegah input dari memblokir proses, dan tidak memberi makan apa pun untuk permintaan input?
Qian Chen

1
@ ElgsQianChen Ini akan memblokir file descriptor 0 yaitu STDIN sehingga Anda tidak dapat mengirimkan input lagi melalui itu..Jika tidak ada FD lain yang dikonfigurasi untuk mengambil input dari Anda tidak akan dapat memberikan input lebih lanjut ke program ..
heemayl
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.