Betrachtet man das folgende Beispiel zur Verfügung steht, einen Befehl zu emulieren, die Ausgabe nach 10 Sekunden gibt: exec 5< <(sleep 10; pwd)
Linux: überprüfen, ob Dateideskriptor zum Lesen
In Solaris, wenn ich den Dateideskriptor überprüfe früher als 10 Sekunden, kann ich sehen, dass es eine Größe von 0 hat und dies sagt mir, dass es noch nicht mit Daten gefüllt wurde. Ich kann einfach jede Sekunde überprüfen, bis die Datei Testbedingung (ungleich 0) erfüllt ist, und dann die Daten ziehen:
while true; do
if [[ -s /proc/$$/fd/5 ]]; then
variable=$(cat <&5)
break
fi
sleep 1
done
Aber in Linux kann ich nicht tun, um diesen (RedHat, Debian usw.). Alle Dateideskriptoren werden mit einer Größe von 64 Byte angezeigt, unabhängig davon, ob sie Daten enthalten oder nicht. Für verschiedene Befehle, die eine variable Zeit benötigen, um ihre Ausgabe zu dumpen, weiß ich nicht, wann ich den Dateideskriptor lesen sollte. Nein, ich möchte nicht nur auf cat <&5
warten, bis ich fertig bin, ich muss wissen, wann ich die cat
an erster Stelle durchführen soll. Weil ich diesen Mechanismus verwende, um gleichzeitige Befehle auszugeben und ihre Ausgabe den entsprechenden Dateideskriptoren zuzuweisen. Wie bereits erwähnt, funktioniert das bei Solaris sehr gut. Hier
Funktioniert perfekt, danke. Ich wusste, dass "lesen" in der Lage ist, ... aus einem Dateideskriptor zu lesen, aber nie darüber nachgedacht hat, was "-t" tun würde. Ich habe die 'Dummy'-Variable eliminiert, da sie nicht gefüllt wird, selbst wenn Daten verfügbar sind und die Syntax ohne sie funktioniert. –