</dev/null

  • Hallo


    Ich schneide via bash script auf einen Schlag ganze Ordner (Vor und Nachlauf).
    Dazu hab ich mir ein script geschrieben ... funktioniert ... aber ich verstehe nicht warum.


    Meine Erwartung war das in einer Schleife folgender Code Block ausreicht.

    Code
    ffmpeg -i "$MOVIE" .....


    Funktioniert nicht. Paar Filme haben funktioniert... bei vielen hat er in den Variablen einfach Müll übergeben.
    Ich hab jetzt mal Google konsoltiert und das meinte ein "</dev/null" würde helfen. (Man beachte die Pfeilrichtung)
    Funktioniert, leider steht da keine Beschreibung dabei warum das so ist... ich würde aber schon gerne verstehen was genau nun </dev/null macht.


    Code
    ffmpeg -i "$MOVIE" ..... </dev/null



    Grüße

    -->
    openwrt + minicom + screen = 24/7 Bootlog

    Edited 2 times, last by Schnello ().

  • </dev/null = Sende die Meldung ins Nirwana :D


    https://de.wikipedia.org/wiki//dev/null


    E2 Box: TWO ~ ONE ~ DM8000 ~ DM7080 ~ DM7020HD~ DM9x0 ~ DM820 ~ DM800(SE(v2))~ DM52x ~ DM500HD(v2)~ DM7025(+)
    E1 Box: DM7020 ~ DM7000 ~ DM 5620 ~ DM600 ~ DM500+ ~ DM500 ~ TRIAX 272-S
    Image: OE2.5/OE2.6 Unst./GP4.1 ~ OE2.5 Unst./GP3.3 ~ OE2.2 Unst./GP3.3 ~ OE2.0 Exp./GP3.2 ~ iCVS/GP3 ~ Gemini 4.70
    Sonstiges: DM Tastatur ~ Box: DM100 ~ Router: Fritz!Box 7590 ~ Wlan Stick: Dream Multimedia ~ Server: ALIX.3D3 ~ BananaPI
    Satelliten: WaveFrontier T90
    23,5°E | 19,2°E | 16.0°E | 13,0°E | 10,0°E | 9,0°E | 7,0°E | 4,9°E | 3.0°E | 1.9°E | 0,8°W | 4,0°W | 5,0°W | 8,0°W | 12,5°W | 15,0°W | 22,0°W | 24,5°W | 30.0°W


    Hilfe gesucht ? schau mal ins Gemini Project WIKI, auch unsere Video Tutorial sind für den Einstieg sehr empfehlenswert

  • Hallo.


    >/dev/null sendet die Meldungen ins Nirvana.


    Was macht denn aber nun </dev/null und warum führt es dazu das ffmpeg nun die Variablen richtig übernimmt?



    Grüße

    -->
    openwrt + minicom + screen = 24/7 Bootlog

  • Quote

    Originally posted by Schnello
    >/dev/null sendet die Meldungen ins Nirvana.


    Strenggenommen schließt es in dem für die Ausführung des Kommandos neu erzeugten Prozess den zuvor von der Shell ererbten Filedescriptor 1 (STDOUT, die Standardausgabe, zeigt interaktiv normalerweise auf das Terminal, in dem die Shell läuft) und öffnet /dev/null neu auf diesem Filedescriptor. Das wirkt sich dann so aus, dass alles, was der Prozess auf STDOUT ausgibt, im Nulldevice versenkt wird. Dort landen alle normalen Ausgaben eines typischen Unix-Kommandos, außer Fehlermeldungen (die gehen auf STDERR aka 2).


    Quote

    Was macht denn aber nun </dev/null


    Es schließt den FD 0 (STDIN, die Standardeingabe, typisch wieder das Terminal) und öffnet neu /dev/null auf diesem FD. Lesen von /dev/null führt zu sofortigem EOF (im Gegensatz zu /dev/zero, von dem man einen endlosen Stream von Null-Bytes lesen kann).


    Quote

    und warum führt es dazu das ffmpeg nun die Variablen richtig übernimmt?


    Um das zu beantworten, müsste man mehr von Deinem Script sehen. Typischerweise hat sowas oft mit der Funktion isatty(3) zu tun, die prüft, ob ein bestimmter FD auf ein Terminal zeigt. Einige Programme benutzen isatty(0) (also für die Standardeingabe) zum Test, ob sie interaktiv laufen oder in einem Script und verhalten sich dann unterschiedlich. Einige Programme verhalten sich auch unterschiedlich, je nachdem wie viele Parameter sie bekommen. Sie könnten z.B. bei Aufruf ohne Parameter von STDIN lesen und auf STDOUT ausgeben (Unix-Slang "Filter", der einfachste Filter ist cat(1)), mit einem Parameter hingegen vom angegebenen File lesen und auf STDOUT ausgeben und mit zwei Parametern vom ersten Filenamen lesen und auf den zweiten ausgeben. Es kann auch welche geben, die bei genau einem Parameter von STDIN lesen wollen - und sich dann anders verhalten, wenn das ein TTY ist oder EOF liefert etc. Details findet man sicher in der Manpage von ffmpeg und mit ein paar Tests. Dazu am besten das Script mit den Flags -xv laufen lassen, dann wird es sehr gesprächig (set -xv am Anfang, oder -xv hinter den Interpreter-Shebang).


    Klassische Übungsaufgabe: Erklären Sie die Abläufe in der File Descriptor Table und die resultierenden Auswirkungen auf den Befehl command bei diesem Bourne Shell Befehl und diskutieren Sie, ob die Reihenfolge, in der die E/A-Umleitungen angegeben wurden, beliebig änderbar ist:

    Code
    command </dev/null >/dev/null 2>&1


    HTH & SCNR,
    Andre.

  • Danke für Eure Antworten und Tipps. Ich werde das mal abarbeiten und vielleicht bekomme ich dann die Antwort.

    -->
    openwrt + minicom + screen = 24/7 Bootlog