¿Qué significa "</ dev / null"?

16

Entiendo que > /dev/nullredirige las cosas a las /dev/nullque actúa como un agujero negro. Sin embargo, no entiendo lo que < /dev/nullsignifica. Vi un guión escrito así:

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

Entonces, ¿qué significa < /dev/nullen el código anterior?

Aquí hay un ejemplo donde se sugiere

Qian Chen
fuente
Posible duplicado de ¿Cuáles son los operadores de control y redirección del shell?   Además, sospechosamente similar a ¿Qué hace <&-?
G-Man dice 'reinstalar a Monica' el

Respuestas:

19

Asegura que todos los flujos de E / S se contabilizan / ocupan.

De esta manera, el proceso en segundo plano no tiene nada "vinculado" al terminal, por lo que puede continuar con su negocio sin que su programa intente leer desde TTY, lo que provocaría que el terminal se bloquee.

En este caso, dado que está iniciando el proceso a través de ssh desde un script de shell, se está asegurando de que el script pueda avanzar sin gravámenes.

usuario3276552
fuente
¿Asume que myprogram toma alguna entrada, pero en este caso no le da nada a myprogram como entrada?
Qian Chen
Gracias. Entiendo todo lo demás excepto el < /dev/null.
Qian Chen
Entonces, ¿cuál es la diferencia entre el código y el mismo código sin < /dev/null?
Qian Chen
De hecho, leí el código desde aquí: stackoverflow.com/questions/29142/…
Qian Chen
2
me alegro de que haya ayudado! perdón por la escapada; Sin embargo, el contexto ayudó, ¡gracias! - nota al margen: Voy a eliminar un montón de mis comentarios en un minuto o dos, ahora que las cosas están clavados, que sólo se ve confuso para cualquier otra persona que lo ve
user3276552
12

program </dev/nullsignifica que programestá tomando su argumento de entrada (se puede ingresar el parámetro a una opción o se puede ingresar el archivo para operar) a través del descriptor de archivo 0, es decir, STDIN, desde el archivo /dev/null.

Como ya sabe, /dev/nullno contiene nada, notificará EOF (Fin del archivo) al leerlo, por lo que cualquier programa que tome información /dev/nullbásicamente no redirigirá nada como argumento de entrada.

heemayl
fuente
Entonces, ¿hay alguna diferencia para dejar de < /dev/nulllado? Solo escríbelo comonohup myprogram > foo.out 2> foo.err &
Qian Chen
1
@ElgsQianChen Eso depende de tu ... program¿qué quiere como STDIN? Algunos programas pueden hacer que sea obligatorio, por lo que debe poner algo como STDIN, este podría ser el caso aquí que acaba de usar /dev/nullcomo STDIN y deja que el programa haga el procesamiento y ponga STDOUT y STDERR en los archivos mencionados ...
heemayl
Entonces, ¿previene efectivamente que cualquier entrada bloquee el proceso y simplemente no alimenta nada a ninguna solicitud de entrada?
Qian Chen
1
@ElgsQianChen Bloqueará el descriptor de archivo 0, es decir, STDIN, por lo que no puede pasar más entradas a través de eso ... si no hay otro FD configurado para recibir entradas, no podrá dar más entradas al programa ...
heemayl