I verwendetWie rückgängig exec>/dev/null in bash?
exec > /dev/null
Ausgabe zu unterdrücken.
Gibt es einen Befehl, dies rückgängig zu machen? (. Ohne das Skript neu zu starten)
I verwendetWie rückgängig exec>/dev/null in bash?
exec > /dev/null
Ausgabe zu unterdrücken.
Gibt es einen Befehl, dies rückgängig zu machen? (. Ohne das Skript neu zu starten)
Wenn Sie nur Ausgang an der Eingabeaufforderung wieder zu bekommen, können Sie dies tun:
exec >/dev/tty
Wenn Sie ein Skript erstellen, und Sie wollen, um die Ausgabe haben diese Befehle in Klammern einer bestimmten Gruppe von Befehlen umgeleitet, setzen:
{
command
command
} >/dev/null
Nicht wirklich, wie das erforderlich wäre, den Zustand eines laufenden Prozesses zu ändern. Selbst wenn man davon ausgeht, dass alles, was Sie vor dem Zurücksetzen der Standardausgabe geschrieben haben, wirklich vollständig verschwunden ist, da es an den Bit-Bucket gesendet wurde.
Um es richtig zu machen, müssen Sie das Original FD 1 woanders kopieren, bevor Sie es auf/dev/null zurücksetzen. In diesem Fall speichere ich eine Sicherung auf FD 5:
exec 5>&1 >/dev/null
...
exec 1>&5
Eine weitere Option ist innerhalb eines Blocks stdout zu umleiten anstatt exec
mit:
{
...
} >/dev/null
"exec> & 5>/dev/null" antwortet mit "bash: 5: Bad file descriptor". – user2267134
@ user2267134 Hoppla. Fest. –
@CharlesDuffy Gibt es eine Möglichkeit, STDERR und STDOUT mit der ersten Methode umzuleiten? Derzeit leitet es nur STDOUT (& 1) um. – jerzy
stdout wiederherzustellen Ich benutze
unset &1
Eh? Bash scheint dies als 'unset & 1' zu implementieren - was bedeutet, dass 'unset' im Hintergrund ausgeführt wird, gefolgt von '1' als Befehl. Außerdem sehe ich nach einer Umleitung in der Dateideskriptortabelle keinen Hinweis darauf, dass es eine Sicherungskopie beibehielte und somit jede Wiederherstellungsoperation möglich ist. Sind Sie sicher, dass Sie diese Syntax nicht von einer anderen Shell erhalten haben? –
Dies ist nur dann korrekt, wenn das ursprüngliche stdout an das TTY übergeben wurde, was auch der Fall sein kann. –
@charlesduffy: OK. Vielleicht habe ich den Punkt verpasst. Ich dachte, sie wollten nur die Ausgabe an einer Eingabeaufforderung sehen. –
Guter Punkt zum Umleiten von Codeblöcken. Ich hoffe, es macht Ihnen nichts aus, wenn ich es anwende. –