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!


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

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 .


1

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

sleep 3 & disown

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.