Cosa significa "</ dev / null"?


16

Capisco > /dev/nullreindirizzare le cose a /dev/nullcui si comporta come un buco nero. Tuttavia, non capisco cosa < /dev/nullsignifichi. Ho visto alcuni script scritti in questo modo:

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

Quindi, cosa significa < /dev/nullnel codice sopra?

ecco un esempio in cui è suggerito


Risposte:


19

Assicura che tutti i flussi I / O siano contabilizzati / occupati.

In questo modo, il processo in background non ha nulla di "legato" al terminale in modo da poter svolgere la propria attività senza che il programma tenti di leggere da TTY, il che causerebbe il blocco del terminale.

In questo caso, poiché stai avviando il processo su ssh da uno script di shell, si sta assicurando che lo script possa spostarsi senza vincoli.


Presuppone che myprogram richieda qualche input, ma in questo caso non fornisce nulla a myprogram come input?
Qian Chen,

Grazie. Capisco tutto il resto tranne il < /dev/null.
Qian Chen,

Quindi qual è la differenza tra il codice e lo stesso codice senza < /dev/null?
Qian Chen,

In realtà ho letto il codice da qui: stackoverflow.com/questions/29142/…
Qian Chen

2
felice che abbia aiutato! scusa per il runaround; il contesto ha aiutato però, grazie! - nota a margine: eliminerò un sacco di miei commenti tra un minuto o due, ora che le cose sono inchiodate, sembra confuso per chiunque lo veda
user3276552

12

program </dev/nullsignifica che programsta prendendo il suo argomento di input (può essere un parametro di input per un'opzione o può essere un file di input su cui operare) tramite il descrittore di file 0 cioè STDIN, dal file /dev/null.

Come già sapete, /dev/nullnon contiene nulla, notificherà EOF (End of File) alla lettura, quindi qualsiasi programma che riceve input da /dev/nullreindirizzerà praticamente nulla come argomento di input.


Quindi c'è qualche differenza da lasciare < /dev/nullfuori? Basta scrivere comenohup myprogram > foo.out 2> foo.err &
Qian Chen il

1
@ElgsQianChen Dipende dal tuo ... programcosa vuole come STDIN? Alcuni programmi potrebbero renderlo obbligatorio, quindi è necessario inserire qualcosa come STDIN, questo potrebbe essere il caso in cui hai appena usato /dev/nullcome STDIN e lasciare che il programma
esegua

Quindi impedisce efficacemente a qualsiasi input di bloccare il processo e non fornisce nulla a nessuna richiesta di input?
Qian Chen,

1
@ElgsQianChen Bloccherà il descrittore di file 0 vale a dire STDIN, quindi non puoi più passare alcun input attraverso quello..se non ci sono altri FD configurati per ricevere input da te non sarai in grado di fornire ulteriori input al programma ..
heemayl,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.