Was bedeutet "</ dev / null"?

16

Ich verstehe, > /dev/nullleitet Dinge weiter, /dev/nulldie wie ein Schwarzes Loch wirken. Ich verstehe jedoch nicht, was das < /dev/nullbedeutet. Ich habe folgendes Skript gesehen:

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

Was bedeutet < /dev/nullder obige Code?

Hier ist ein Beispiel, in dem es vorgeschlagen wird

Qian Chen
quelle
Mögliches Duplikat von Was sind die Steuerungs- und Umleitungsoperatoren der Shell?   Ebenfalls verdächtig ähnlich wie What does <&-do?
G-Man sagt, dass Monica

Antworten:

19

Es stellt sicher, dass alle E / A-Datenströme berücksichtigt / belegt werden.

Auf diese Weise ist der Hintergrundprozess nicht an das Terminal "gebunden", sodass Sie Ihren Geschäften nachgehen können, ohne dass Ihr Programm versucht, von TTY zu lesen, was zum Absturz des Terminals führen würde.

Da Sie in diesem Fall den Prozess über ssh von einem Shell-Skript aus starten, müssen Sie sicherstellen, dass das Skript unbelastet ausgeführt werden kann.

user3276552
quelle
Nimmt es an, dass myprogram Eingaben benötigt, aber in diesem Fall füttert myprogram nichts als Eingabe?
Qian Chen
Vielen Dank. Ich verstehe den ganzen Rest außer dem < /dev/null.
Qian Chen
Also, was ist der Unterschied zwischen dem Code und dem gleichen Code ohne < /dev/null?
Qian Chen
Ich habe den Code tatsächlich von hier gelesen: stackoverflow.com/questions/29142/…
Qian Chen
2
froh, dass es geholfen hat! Entschuldigung für die Umgehung; Der Kontext hat aber geholfen, danke! - Randnotiz: Ich werde ein paar meiner Kommentare in ein oder zwei Minuten löschen, jetzt, wo die Dinge festgenagelt sind, sieht es für jeden verwirrend aus, der es sieht
user3276552
12

program </dev/nullbedeutet, dass das programArgument über den Dateideskriptor 0, dh STDIN, aus der Datei übernommen wird (kann ein Eingabeparameter für eine Option sein oder eine Eingabedatei sein, mit der gearbeitet werden soll) /dev/null.

Wie Sie bereits wissen, /dev/nullenthält es nichts und benachrichtigt EOF (End of File) beim Lesen, sodass jedes Programm, das Eingaben von /dev/nullnimmt, im Grunde genommen nichts als Eingabeargument umleitet.

heemayl
quelle
Gibt es also einen Unterschied, den man einfach weglassen sollte < /dev/null? Schreiben Sie es einfach alsnohup myprogram > foo.out 2> foo.err &
Qian Chen
1
@ElgsQianChen Das kommt auf deine program..was will es als STDIN? Einige Programme machen es möglicherweise obligatorisch, so dass Sie etwas als STDIN angeben müssen. Dies kann hier der Fall sein, dass Sie nur /dev/nullals STDIN verwendet haben und das Programm die Verarbeitung durchführen und STDOUT und STDERR in die genannten Dateien
einfügen
Verhindert es effektiv, dass Eingaben den Prozess blockieren, und füttert nur keine Eingabeanforderung?
Qian Chen
1
@ElgsQianChen Der Dateideskriptor 0, dh STDIN, wird blockiert, so dass Sie keine weiteren Eingaben mehr über dieses FD vornehmen können. Wenn kein anderes FD für Eingaben konfiguriert ist, können Sie dem Programm keine weiteren Eingaben mehr geben.
Heemayl