Ich habe ein Programm, das auf stdout ausgibt, und möchte diese Ausgabe in einem Bash-Skript stumm schalten, während ich zu einer Datei weiterleite.
Wenn Sie beispielsweise das Programm ausführen, wird Folgendes ausgegeben:
% myprogram
% WELCOME TO MY PROGRAM
% Done.
Ich möchte, dass das folgende Skript nichts an das Terminal ausgibt:
#!/bin/bash
myprogram > sample.s
Antworten:
Wenn es auch an stderr ausgegeben wird, möchten Sie dies zum Schweigen bringen. Sie können dies tun, indem Sie den Dateideskriptor 2 umleiten:
quelle
&>
ist viel älter als Bash 4.&>
Einführung der Änderungsprotokolldokumentation verlinken ? : o>>&
in 4.0 eingeführt wurde. Es gibt keine Erwähnung,&>
aber die ÄNDERUNGEN gehen nur auf 2.0 zurück. Ich denke, das bedeutet, dass es bereits in 1.x war.git blame
aufredir.c
Punkte zu einem Commit von 1998 für das älteste Vorkommen, das sich noch in der aktuellen Codebasis befindet.Leiten Sie stderr zu stdout um
Dadurch wird der stderr (der Deskriptor 2 ist) zum Dateideskriptor 1 umgeleitet, der der stdout ist.
Stdout in Datei umleiten
Wenn Sie dies ausführen, leiten Sie das Standardout in die Datei um
sample.s
Leiten Sie stderr und stdout in Datei um
Das Kombinieren der beiden Befehle führt dazu, dass sowohl stderr als auch stdout zu sample.s umgeleitet werden
Leiten Sie stderr und stdout nach / dev / null um
Weiterleiten an,
/dev/null
wenn Sie Ihre Anwendung vollständig stumm schalten möchten.quelle
myprogram >/dev/null 2>&1
(beachten Sie den Keil vor/dev/null
und die Reihenfolge der Umleitungen).myprogram &>/dev/null
genug?Alle Ausgaben:
Tragbar:
Tragbar:
Für neuere Bash (kein tragbares):
quelle
-
und&>
ist eine nicht portable Bourne-Shell-Erweiterung.echo moo 1>&-
erzeugt einen Fehler, weil Dateideskriptor 1 geschlossen ist:-bash: echo: write error: Bad file descriptor
Wenn Sie STDOUT und STDERR beide [alles] wollen, ist der einfachste Weg:
dann lauf es wie
./script
folgt aus, und Sie erhalten keine Ausgabe an Ihr Terminal. :) :)Das "> &" bedeutet STDERR und STDOUT. das
&
funktioniert genauso mit einem rohr:./script |& sed
das schickt alles an sedquelle
a 2>&1 | b 2>&1 | c
Wenn Sie immer noch Schwierigkeiten haben, eine Antwort zu finden, insbesondere wenn Sie eine Datei für die Ausgabe erstellt haben und eine klare Alternative bevorzugen:
echo "hi" | grep "use this hack to hide the oputut :) "
quelle
Versuche es mit:
keine Ausgabe erhalten
quelle
Hinweis: Diese Antwort bezieht sich auf die Frage "So deaktivieren Sie das Echo beim Ausführen eines Linux-Shell-Skripts", die wiederum als zu diesem dupliziert markiert wurde.
Um das Echo tatsächlich auszuschalten, lautet der Befehl:
(Dies ist zum Beispiel der Fall, wenn Sie ein Kennwort eingeben möchten und nicht möchten, dass es lesbar ist. Denken Sie daran, das Echo am Ende Ihres Skripts einzuschalten, da sonst die Person, die Ihr Skript ausführt, nicht sieht, was sie ist / sie gibt von da an ein. Um das Echo beim Laufen einzuschalten:
quelle
Nützlich in Skripten:
Holen Sie sich nur den STDERR in eine Datei, während Sie STDOUT ausblenden, auch wenn das auszublendende Programm überhaupt nicht vorhanden ist (hängt nie das übergeordnete Skript auf). Dies allein hat funktioniert:
Lösen Sie alles vollständig und bringen Sie alles zum Schweigen. Selbst das Beenden des übergeordneten Skripts wird nicht abgebrochen
./prog
:quelle
Für die Ausgabe nur bei Fehler :
quelle