#de-101-500-0009

Frage:
Um die Ausgabe, Fehlerausgabe (stderr) oder der Ausgabe (stdout), auf der Konsole oder zum Gerät vorzubeugen, wenn ein Kommando als root-Benutzer ausgeführt wird, sollte dieser String an das Kommando angehängt werden

Auswahlmöglichkeiten:
1) >/dev/null
2)
>/dev/null 1>&2
3)
>/dev/null 2>&1
4)
1>&2 >/dev/null
5)
2>&1 > /dev/null

Tipps:
Linux Operatoren:
> : Leitet von Links nach Rechts die Ausgabe weiter.
1 : Ist der Standard-Ausgabe-Datenstrom bzw. die Standard-Ausgabe  / „I/O Stream“ (stdout)
2 :
Ist der Fehler-Datenstrom bzw. die Fehlerausgabe / „I/O Stream“ (stderr), falls ein Programm z.B. unordentlich beendet wurde (beim Rückgabewert größer 0)  oder beim loggen der Fehler sollten eigene Datei zur Fehlerausgabe des Programms benutzt werden.
& : Wird Benutzt um den ersten Befehl im Hintergrund auszuführen. Z.B. „Befehl1 & Befehl2“ wird die zwei programme gleichzeitig starten.
1>&2 : Leitet den stdout(1) in den stderr(2) um. Es wird „&2“ Benutzt weil sonst die Ausgabe in der Datei Namens „2“ Landen würde und nicht in dem Fehler-Stream.
2>&1 : Leitet den stderr(2) in den stdout(1) Stream um, so kann man die Fehlerausgaben und Normale-Ausgaben zusammen in eine Datei speichern : z.B. : „befehl1 2>&1 ./befehl1_logfile.txt“

Linux-Dateien:
/dev/null ist ein Virtuelles Gerät welches die Ausgabe verschwinden Läst.
/dev/stderr ist die Standard Fehler Ausgabe. Als symlink zu /proc/self/fd/0

Beispiele :
┌──(user㉿disp2872)-[~]
└─$ cat ./script.sh
# /bin/sh
ls
dnf update

┌──(user㉿disp2872)-[~]
└─$ chmod +x script.sh

┌──(user㉿disp2872)-[~]
└─$ ./script.sh 1> /dev/null
Error: This command has to be run with superuser privileges (under the root user on most systems).
# OK ! Es wurde ja nur die normale Ausgabe an das /dev/null weitergeleitet, und die zu sehende Ausgabe ist die  Fehlerausgabe.

┌──(user㉿disp2872)-[~]
└─$ ./script.sh 2> /dev/null
Desktop    Downloads  Pictures    QubesIncoming  Videos        script.sh
Documents  Music      Public    Templates      office.AppImage
# OK die Fehler wurden ausgeblendet.

Links:
https://linuxconfig.org/list-of-exit-codes-on-linux

https://stackoverflow.com/questions/3385201/confused-about-stdin-stdout-and-stderr
https://wiki.ubuntuusers.de/Shell/Operatoren/
https://linuxsimply.com/bash-scripting-tutorial/redirection-and-piping/redirection/echo-to-stderr/
profile

Warum wird in Linux “> /dev/null 2>&1” benutzt um alle Ausgaben verschwinden zu lassen ? Da ja /dev/null sowieso alles verschwinden lassen sollte?
gpt-4o-mini, Today at 12:09 AM

In Linux wird der Befehl > /dev/null 2>&1 verwendet, um sowohl die Standardausgabe als auch die Standardfehlerausgabe eines Befehls in /dev/null umzuleiten.
Hier ist eine detaillierte Erklärung, was jede Komponente bedeutet:

  1. > – Dies ist die Umleitung der Standardausgabe (stdout). Wenn du etwas mit > in eine Datei umleitest, wird die Standardausgabe des Befehls dorthin geschrieben.

  2. /dev/null – Dies ist eine spezielle Datei, die alle eingehenden Daten einfach verwirft. Es wird oft als „Datenloch“ bezeichnet, in das man alles „verschwinden“ lassen kann.

  3. 2>&1 – Dies ist die Umleitung der Standardfehlerausgabe (stderr) zur Standardausgabe. Hierbei steht 2 für den Dateideskriptor der Standardfehlerausgabe und 1 für den Dateideskriptor der Standardausgabe. Mit 2>&1 wird also die Fehlerausgabe umgeleitet, sodass sie ebenfalls dorthin fließt, wo die Standardausgabe hin umgeleitet wird, also nach /dev/null.

Zusammengefasst:

  • Wenn du nur > /dev/null verwendest, wird nur die Standardausgabe umgeleitet. Die Standardfehlerausgabe bleibt immer noch sichtbar.
  • Mit > /dev/null 2>&1 wird sowohl die Standardausgabe als auch die Standardfehlerausgabe unterdrückt, sodass keine Ausgaben mehr angezeigt werden.

Das ist insbesondere nützlich, wenn du einen Befehl ausführst, dessen Ausgabe irrelevant ist und du keine Meldungen sehen willst, die den Bildschirm überfluten oder dein Skript stören könnten.

Lösung:
3) >/dev/null 2>&1

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert