Alle Ausgaben eines Hintergrundprozesses ausblenden

2

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

Es wird derzeit folgendermaßen aufgerufen:

alert "Message for this current task" &

Ziemlich einfach.

Wenn ich dieses Format verwende, erhalte ich jedoch die folgende Ausgabe:

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

Ich möchte die Ausgabe von pid und. Unterdrücken done Botschaft. Wie mache ich das?

Ich habe es versucht alert "Foobar" > /dev/null & aber das leitet nur die Ausgabe von alert an devnull weiter.

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

Wie verwende ich & im "leisen" Modus?

asfallows
quelle

Antworten:

2

Sie können eine Subshell verwenden, um die Jobsteuerungsmeldungen zu entfernen:

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

Wenn Ihr Commad auch eine Ausgabe an STDOUT und / oder STDERR erzeugt, leiten Sie diese an /dev/null:

$ ( alertme > /dev/null 2>&1 & )
mpy
quelle
Vielen Dank! Ich habe es versucht, aber ich dachte, ich muss das & amp; außerhalb der (), so natürlich gab es mir immer noch die Ausgabe.
asfallows
0

Eine etwas übersichtlichere Version einer anderen Antwort hier:

(&>/dev/null alertme &)
Tom Hale
quelle