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é


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.


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


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.