pipes



  • Kann mir jemand anschaulich erklären, wie pipes funktionieren?
    (Bitte nicht auf den uuoc achten)

    cat datei.txt | grep --ignore-case '\.jpg$' | noch_ein_befehl > ausgabedatei
    

    Mir ist klar, dass die Ausgabe eines Befehls als Eingabe des nächsten verwendet wird.

    Allerdings: wie läuft das genau ab?

    Wenn eine Zeile der datei.txt von cat ausgegben bearbeitet ist, kann diese dann sofort von grep verwendet werden?
    Oder muss grep warten bis cat fertig ist (höchstwahrscheinlich nein, wäre ja unsinning)

    Welche Vorteile hat die Pipeline?
    Wenn datei.txt jetzt 1 Milliarde Einträge hat, wie sieht es da zb mit Speicherverbrauch aus?

    Kann man so etwas in einer Programmiersprache nachbauen ohne eine Shell verwenden zu müssen?
    (ich denke da an eine Verkettung von Funktionen a la
    read(datei.txt).grep("jpg").irgendwas().write(ausgabedatei)
    )


  • Mod

    shisha schrieb:

    Wenn eine Zeile der datei.txt von cat ausgegben bearbeitet ist, kann diese dann sofort von grep verwendet werden?
    Oder muss grep warten bis cat fertig ist (höchstwahrscheinlich nein, wäre ja unsinning)

    Das geht sofort.

    Welche Vorteile hat die Pipeline?

    Sie sind nützlich.

    Wenn datei.txt jetzt 1 Milliarde Einträge hat, wie sieht es da zb mit Speicherverbrauch aus?

    Pipes haben eine bestimmte Maximale Größe. Wenn die Pipe voll ist, wartet der schreibende Prozess bis etwas rausgelesen wurde.

    Kann man so etwas in einer Programmiersprache nachbauen ohne eine Shell verwenden zu müssen?
    (ich denke da an eine Verkettung von Funktionen a la
    read(datei.txt).grep("jpg").irgendwas().write(ausgabedatei)
    )

    Metaantwort: Die Shells sind auch irgendwie programmiert, natürlich muss das gehen.
    Konkrete Antwort: Die Pipes existieren auf Systemebene. Das Systemkommando pipe() erzeugt dir Pipes. Dies werden auch die Shells intern benutzen. Details erfährst du bei Google oder im Linux-Programmierforum.


Anmelden zum Antworten