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


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.


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.