Alle Ausgaben eines Hintergrundprozesses ausblenden

Alle Ausgaben eines Hintergrundprozesses ausblenden

Ich habe eine Reihe von Befehlen in meinem zshrc, die im Hintergrund einen anderen Befehl aufrufen. Der Hintergrundbefehl ist ein Alias ​​für ein Text-to-Speech-Programm (ich verwende ihn, um Audiosignale zu erhalten, wenn Prozesse wie Testsuiten und Patches abgeschlossen sind).

Derzeit wird es folgendermaßen aufgerufen:

alert "Message for this current task" &

Ziemlich einfach.

Wenn ich dieses Format verwende, erhalte ich jedoch diese Ausgabe:

$ alert "Foobar" &
[1] 85072
$
[1]  + done       alert "Foobar"
$

Ich möchte die Ausgabe der PID und der doneMeldung unterdrücken. Wie mache ich das?

Ich habe es versucht alert "Foobar" > /dev/null &, aber dadurch wird die Ausgabe der Warnung nur an devnull weitergeleitet.

Ich habe es versucht alert "Foobar" & > /dev/null, aber das hat unerwartete schlimme Dinge bewirkt, die ich nicht ganz verstehe.

Wie verwende ich &den „leisen“ Modus?

Antwort1

Sie können eine Subshell verwenden, um die Job-Control-Meldungen loszuwerden:

$ alias alertme="xmessage Alert!"
$ ( alertme & )
$

Wenn Ihr Befehl auch Ausgaben an STDOUT und/oder STDERR erzeugt, leiten Sie diese weiter an /dev/null:

$ ( alertme > /dev/null 2>&1 & )

Antwort2

Eine etwas schönere Version einer anderen Antwort hier:

(&>/dev/null alertme &)

verwandte Informationen