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 done
Meldung 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 &)