Que signifie «</ dev / null»?

16

Je comprends > /dev/nullredirige les choses vers /dev/nulllesquelles agit comme un trou noir. Cependant, je ne comprends pas ce que cela < /dev/nullsignifie. J'ai vu un script écrit comme ceci:

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

Alors, que signifie < /dev/nullle code ci-dessus?

voici un exemple où il est suggéré

Qian Chen
la source
Duplication possible de Quels sont les opérateurs de contrôle et de redirection du shell?   Aussi, étrangement similaire à Que fait <&--il?
G-Man dit `` Réintègre Monica '' le

Réponses:

19

Il garantit que tous les flux d'E / S sont pris en compte / occupés.

De cette façon, le processus en arrière-plan n'a rien de «lié» au terminal, vous pouvez donc vous consacrer à vos activités sans que votre programme essaie de lire à partir de TTY, ce qui entraînerait le blocage du terminal.

Dans ce cas, puisque vous lancez le processus sur ssh à partir d'un script shell, il s'assure que le script peut se déplacer sans encombre.

user3276552
la source
Suppose-t-il que mon programme prend une entrée, mais dans ce cas, il ne nourrit rien de mon programme en entrée?
Qian Chen
Merci. Je comprends tout le reste sauf le < /dev/null.
Qian Chen
Alors, quelle est la différence entre le code et le même code sans < /dev/null?
Qian Chen
J'ai lu le code d'ici: stackoverflow.com/questions/29142/…
Qian Chen
2
heureux que cela ait aidé! désolé pour le contournement; le contexte a cependant aidé, merci! - note latérale: je vais supprimer un tas de mes commentaires dans une minute ou deux, maintenant que les choses sont clouées, cela semble déroutant pour quiconque le voit
user3276552
12

program </dev/nullsignifie que le programprend son argument d'entrée (peut être un paramètre d'entrée dans une option ou peut être un fichier d'entrée pour fonctionner) via le descripteur de fichier 0, c'est-à-dire STDIN, à partir du fichier /dev/null.

Comme vous le savez déjà, /dev/nullne contient rien, il notifiera EOF (End of File) lors de la lecture, donc tout programme prenant des entrées /dev/nullne redirigera essentiellement rien comme argument d'entrée.

heemayl
la source
Y a-t-il une différence à laisser de < /dev/nullcôté? Il suffit de l'écrire commenohup myprogram > foo.out 2> foo.err &
Qian Chen
1
@ElgsQianChen Cela dépend de votre program.. que veut-il en tant que STDIN? Certains programmes peuvent le rendre obligatoire, vous devez donc mettre quelque chose comme STDIN, cela peut être le cas ici que vous venez d'utiliser /dev/nullcomme STDIN et laissez le programme faire le traitement et mettre STDOUT et STDERR dans les fichiers mentionnés ..
heemayl
Ainsi, cela empêche-t-il efficacement toute entrée de bloquer le processus et ne nourrit-il simplement aucune demande d'entrée?
Qian Chen
1
@ElgsQianChen Il bloquera le descripteur de fichier 0, c'est-à-dire STDIN, de sorte que vous ne pourrez plus transmettre d'entrée via ce fichier.
heemayl