“</ Dev / null” ne anlama geliyor?


16

Bir kara delik gibi davranan > /dev/nullşeyleri yönlendirdiğini anlıyorum /dev/null. Ancak, ne < /dev/nullanlama geldiğini anlamıyorum . Böyle bir senaryo gördüm:

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

Peki, < /dev/nullyukarıdaki kodda ne anlama geliyor?

işte önerilen bir örnek


Yanıtlar:


19

Tüm G / Ç akışlarının hesaba katılmasını / işgal edilmesini sağlar.

Bu şekilde, arka plandaki işlemin terminale "bağlı" bir şeyleri yoktur, böylece programınız TTY'den okumaya çalışmadan işinizle ilgili olarak terminalin askıda kalmasına neden olabilirsiniz.

Bu durumda, işlemi bir kabuk komut dosyasından ssh üzerinden başlattığınızdan, komut dosyasının numarasız olarak hareket edebildiğinden emin olunur.


Programımın bir miktar girdi aldığını varsayıyor mu, ancak bu durumda programımı hiçbir şey girdi olarak beslemiyor mu?
Qian Chen

Teşekkürler. Dışında kalan her şeyi anlıyorum < /dev/null.
Qian Chen

Peki kod ile aynı kod arasındaki fark < /dev/nullnedir?
Qian Chen

Aslında kodu buradan okudum: stackoverflow.com/questions/29142/…
Qian Chen

2
yardımcı oldu sevindim! kaçış için üzgünüm; bağlam yine de yardımcı oldu, teşekkürler! - yan not: Bir veya iki dakika içinde yorumlarımın bir demetini sileceğim, şimdi işler çivilenmiş, sadece gören herkes için kafa karıştırıcı görünüyor
user3276552

12

program </dev/nullbu araçlar program, giriş argüman alıyor (bir seçenek girdi parametresi olabilir veya giriş dosyası üzerinde işlem olabilir) dosyasından, yani STDIN'den dosya tanıtıcısı 0 ile /dev/null.

Bildiğiniz gibi /dev/null, hiçbir şey içermez, okuduktan sonra EOF'a (Dosya Sonu) bildirir, böylece giriş alan herhangi bir program /dev/nulltemelde hiçbir şeyi giriş argümanı olarak yönlendirmez.


Yani < /dev/nulldışarıda bırakmak için bir fark var mı? Sadece şöyle yaznohup myprogram > foo.out 2> foo.err &
Qian Chen

1
@ElgsQianChen Bu sizin durumunuza bağlıdır .. programSTDIN olarak ne istiyor? Bazı programlar bunu zorunlu kılabilir, bu nedenle STDIN olarak bir şey koymanız gerekir, buradaki /dev/nullSTDIN olarak kullandığınız ve programın işlemi yapmasına ve belirtilen dosyalara STDOUT ve
STDERR'yi koymasına izin verebilirsiniz

Peki, herhangi bir girdinin işlemi engellemesini etkili bir şekilde önler ve herhangi bir girdi isteğine hiçbir şey beslemez mi?
Qian Chen

1
@ElgsQianChen Dosya tanımlayıcısını 0 yani STDIN'i bloke eder, böylece bundan daha fazla girdi geçiremezsiniz. Eğer girdi almak için yapılandırılmış başka bir FD yoksa, programa daha fazla girdi veremezsiniz.
heemayl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.