Wie verstecke ich Shell-Prozessinformationen beim Starten des Hintergrundprozesses?

19
[USER@SERVER ~] sleep 3 &
[1] 5232
[USER@SERVER ~] 
[1]+  Done                    sleep 3
[USER@SERVER ~] 

Wie kann ich diese beiden Nachrichten / dev / null machen ?:

[1] 5232
[1]+  Done                    sleep 3

ps: also ich brauche die ausgabe des prozesses, aber nicht die beiden genannten zeilen!

LanceBaynes
quelle
Sie erhalten diese Zeilen nur, wenn Sie sie interaktiv ausführen. Zum Beispiel nicht, wenn Sie es über ein Skript ausführen.
Derobert

Antworten:

24

Es handelt sich nicht um die Programmausgabe, sondern um nützliche Shell-Informationen.

Diese können jedoch mithilfe von Subshell und Ausgabeumleitung ausgeblendet werden

( sleep 3 & ) > /dev/null 2>&1
ДМИТРИЙ МАЛИКОВ
quelle
2
"2> / dev / null" ist das Gute, ich brauche die Ausgabe des Prozesses
LanceBaynes
@LanceBaynes Der Prozess könnte auch etwas auf stderr schreiben.
Chris Down
2
Es ist bedauerlich, dass dies das Abrufen von pid mit $ besiegt!
Deleplace
3

In bash oder zsh können Sie anrufen disown %1, um der Shell mitzuteilen, dass sie den Job vergessen soll. Dann druckt die Shell keine Nachricht über diesen Job und zeigt sie auch nicht an, wenn Sie jobseinen SIGHUP ausführen oder jemals an ihn senden. In zsh ist das Starten des Jobs mit &!statt &gleichbedeutend mit dem disownsofortigen Aufrufen .

Gilles 'SO - hör auf böse zu sein'
quelle
1

Ich kann @Gilles (noch) nicht kommentieren, aber es scheint, dass dies & disownauch in bash funktioniert:

sleep 3 & disown
Dubberx
quelle
Dies scheint in Bash v.4.1.2
Alexej Magura am
1

Versuchen:

user@host:~$ read < <( sleep 10 & echo $! )
user@host:~$ echo $REPLY
28677

Und Sie haben sowohl den Ausgang als auch die PID ausgeblendet . Beachten Sie, dass Sie die PID immer noch aus $ REPLY abrufen können

mark_infinite
quelle