Hallo,
ich bin z.Zt. dabei mich in Bash-Scripting fit zu machen und komme sehr gut voran, allerdings ist mir eine Kleinigkeit nicht klar. Ich musste in einem Script überprüfen, ob ein Benutzer bereits exisitiert und bin dabei auf folgende Codezeile gestoßen:
if id $1 > /dev/null 2>&1; then
soweit ist ja alles klar, if..then, id kenn ich auch, nur was genau bedeutet das
> /dev/null 2>&1
das > /dev/null alleine ist mir auch klar, aber das 2>&1 entzieht sich jeglicher Logik (zumindest meiner ). Also wie gesagt, was diese Codezeile macht ist mir völlig klar, nur dieses 2>&1 hinten kenne ich nicht. Kann mir jemand weiterhelfen?
Dabei erinnere ich mich grade ein (vermutlich themenverwandtes Problem). Ich lösche in besagtem Script einen Benutzer mit userdel $1. Das erzeugt etwas Output auf dem Bildschirm, den ich unterdrücken will, also userdel $1 > /dev/null. Trotzdem sehe ich immer noch die Meldung "no crontab for user" oder so ähnlich - ich kann diese Meldung im Script mit dieser Methode nicht unterdrücken. Wie geht das??
Tom
Frage zu Bash, Syntax ist mir nicht klar
Re: Frage zu Bash, Syntax ist mir nicht klar
Hi,
ich wuerde um zu checken ob ein Benutzer existier, die /etc/passwd parsen, nebenbei bemerkt.
Die Meldung "no crontab for user" wird wohl auf STDERR geschrieben, was sich fuer eine Fehlermeldung/Warnung ja auch anbietet, da du hier STDERR aber nicht weiter behandelst wird es halt auf dem Bildschim ausgegeben. Der Bildschirm (das Terminal) ist das default "Medium" fuer STDOUT und STDERR.
ich wuerde um zu checken ob ein Benutzer existier, die /etc/passwd parsen, nebenbei bemerkt.
Das "2>&1" heisst "haenge den Output der auf STDERR ("Kanal 2") kommt mit an STDOUT ("Kanal 1") an. Da bei dir STDOUT nach /dev/null umgeleitet wird, ist damit saemtlicher Output weg. Um STDOUT umzuleiten reicht es ">/dev/null" zu schreiben, du koenntest aber auch "1>/dev/null" schreiben, oder auch jedes andere Ziel natuerlich.fourhead hat geschrieben:das > /dev/null alleine ist mir auch klar, aber das 2>&1 entzieht sich jeglicher Logik (zumindest meiner ). Also wie gesagt, was diese Codezeile macht ist mir völlig klar, nur dieses 2>&1 hinten kenne ich nicht. Kann mir jemand weiterhelfen?
Dabei erinnere ich mich grade ein (vermutlich themenverwandtes Problem). Ich lösche in besagtem Script einen Benutzer mit userdel $1. Das erzeugt etwas Output auf dem Bildschirm, den ich unterdrücken will, also userdel $1 > /dev/null. Trotzdem sehe ich immer noch die Meldung "no crontab for user" oder so ähnlich - ich kann diese Meldung im Script mit dieser Methode nicht unterdrücken. Wie geht das??
Die Meldung "no crontab for user" wird wohl auf STDERR geschrieben, was sich fuer eine Fehlermeldung/Warnung ja auch anbietet, da du hier STDERR aber nicht weiter behandelst wird es halt auf dem Bildschim ausgegeben. Der Bildschirm (das Terminal) ist das default "Medium" fuer STDOUT und STDERR.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
Hallo,
vielen dank schonmal. Also um mal zusammenzufassen:
>/dev/null oder 1>/dev/null
schreibt NUR STDOUT nach /dev/null
2>/dev/null
schreibt NUR STDERR nach /dev/null. Kann ich das auch kombinieren, also z.b.
>/dev/null 2>/var/log/error.log ?? So das also die normale Ausgabe verschwindet, eventuell auftretende Fehler aber in eine Logdatei geschrieben werden?
Tom
vielen dank schonmal. Also um mal zusammenzufassen:
>/dev/null oder 1>/dev/null
schreibt NUR STDOUT nach /dev/null
2>/dev/null
schreibt NUR STDERR nach /dev/null. Kann ich das auch kombinieren, also z.b.
>/dev/null 2>/var/log/error.log ?? So das also die normale Ausgabe verschwindet, eventuell auftretende Fehler aber in eine Logdatei geschrieben werden?
Tom
- meandtheshell
- Beiträge: 4054
- Registriert: 14.01.2005 17:51:30
Code: Alles auswählen
>/dev/null 2>/var/log/error.log
ja stimmtfourhead hat geschrieben:So das also die normale Ausgabe verschwindet, eventuell auftretende Fehler aber in eine Logdatei geschrieben werden?
Bitte verwende für code code tags - der Lesbarkeit wegen
hier noch zwei gute Links
http://www.tldp.org/LDP/abs/html/io-redirection.html
http://www.linuxfibel.de/bash.htm#EAUmleitung
markus