Wie die gesamte Ausgabe von einem Befehl Bash zu unterdrücken?
Frage
Ich habe einen Bash-Skript, das ein Programm mit Parametern ausgeführt wird. Das Programm gibt einige Status (dies zu tun, das zu tun ...). Es gibt keine Option für dieses Programm, ruhig zu sein. Wie kann ich verhindern, dass das Skript von etwas angezeigt wird?
Ich bin auf der Suche nach so etwas wie Fenstern "echo off".
Lösung
Nachfolgend sendet die Standardausgabe in das Nullgerät (bit bucket).
scriptname >/dev/null
und wenn Sie möchten auch Fehlermeldungen dort gesendet werden, verwenden Sie eine der (die erste in allen Schalen können nicht funktionieren):
scriptname &>/dev/null
scriptname >/dev/null 2>&1
scriptname >/dev/null 2>/dev/null
und, wenn Sie möchten, die Nachrichten aufnehmen, aber nicht sehen, wie sie, ersetzen /dev/null
mit einer tatsächlichen Datei, wie zum Beispiel:
scriptname &>scriptname.out
Für die Vollständigkeit, unter Windows cmd.exe ein (wobei "nul" ist das Äquivalent von "/ dev / null"), es ist:
scriptname >nul 2>nul
Andere Tipps
So etwas wie
script > /dev/null 2>&1
Dies verhindert, dass die Standardausgabe und Fehlerausgabe, Umleitung, sie beide zu /dev/null
.
Versuchen
: $(yourcommand)
:
ist die Abkürzung für "nichts tun".
$()
ist nur Ihr Befehl.
Eine Alternative, die in einigen Situationen passen können, ist das Ergebnis eines Befehls an eine Variable zuzuordnen:
$ DUMMY=$( grep root /etc/passwd 2>&1 )
$ echo $?
0
$ DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
1
Da Bash und anderer POSIX-Kommandozeilen-Interpreter sind nicht die Variablenzuweisungen als Befehl, der Rückkehrcode des vorliegenden Befehls respektiert wird.
Hinweis: assignement mit dem typeset
oder declare
Schlüsselwort wird als Befehl betrachtet, so dass der ausgewertete Rückgabecode für den Fall ist die Zuweisung selbst und nicht der in der Unterschale ausgeführt Befehl:
$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
0
Wie andynormancx Post verwenden: (wenn Sie in einer Unix-Umgebung arbeiten)
scriptname > /dev/null
oder Sie können diese verwenden: (wenn Sie in einer Windows-Umgebung arbeiten)
scriptname > nul
Werfen Sie einen Blick auf dieses Beispiel von der Linux-Dokumentation Projekt :
3.6 Sample: stderr und stdout 2-Datei
Dies wird jede Ausgabe eines Programms in einer Datei platzieren. Dies eignet sich manchmal für cron-Einträge, wenn Sie einen Befehl wollen in absoluter Stille zu übergeben.
rm -f $(find / -name core) &> /dev/null
Wie gesagt, können Sie diese einfache Umleitung verwenden:
/path/to/command &>/dev/null
Sie Skript können Sie die folgenden zu den Linien hinzufügen, die Sie wissen wollen einen Ausgang geben:
some_code 2>>/dev/null
Oder Sie können auch versuchen,
some_code >>/dev/null