Zapobieganie wyświetlaniu napisu „Gotowe” po zakończeniu wykonywania polecenia w tle

34

Jeśli uruchomię polecenie w tle za pomocą &:

sleep 2 &

kiedy polecenie się zakończy, dostaję „Gotowe”. Jak mogę uniknąć wyświetlenia komunikatu „Gotowe”?

juanpablo
źródło

Odpowiedzi:

34

Uruchom polecenie w podpowłoce:

(sleep 2 &)
Wooble
źródło
pamiętaj, że dzięki temu tracisz kontrolę nad zadaniami wewnątrz powłoki dzwoniącego ( jobsnic nie pokaże).
mighq
36

Uruchom wbudowaną powłokę:

$ set +m

Działa to poprzez wyłączenie „trybu monitorowania”, aby powłoka nie zgłaszała kończących zadań w tle.

Mimo uruchamiania polecenia w podpowłoce, takiej jak:

$ (sleep 2&)

... wyłączy również komunikat, jedynym powodem, dla którego działa, jest to, że tryb monitorowania jest domyślnie włączony tylko dla interaktywnych powłok. Oznacza to, że podpowłoka unika komunikatu, uruchamiając dodatkową powłokę, która ma automatyczny „set + m”.

DigitalRoss
źródło
4
Należy zauważyć, że to wyjście nie jest wykonywane przez sen. Jest to powłoka bash, która informuje Cię o zakończeniu zadania w tle.
flolo
8

Chciałbym wyjaśnić dwie wcześniejsze odpowiedzi. Jeśli chcesz, aby nigdy nie wyświetlać komunikatu Gotowe z jakichkolwiek poleceń w powłoce, set +mto jest droga. Po prostu włóż go do swojego .profile i / lub .bashrc i gotowe. Pamiętaj jednak, że jeśli wpiszesz to:

set +m
sleep 2 &
set -m

a sen kończy się po finale set -m, nadal dostaniesz skończoną wiadomość.

Jeśli chcesz wyłączyć komunikat dla wywołania pojedynczego polecenia, należy zastosować technikę podpowłoki (sleep 2 &).

Szczerze mówiąc, wiedziałem o tym set +m, więc +1 do Wooble za oświecenie mnie. Warto jednak zauważyć, że które z dwóch rozwiązań, które chcesz, zależy od tego, co próbujesz zrobić.

andrewdski
źródło
0

Bez podpowłoki możesz wykonać następujące czynności:

silent_background() {
    { 2>&3 "$@"& } 3>&2 2>-
    disown &>/dev/null  # Close STD{OUT,ERR} for silence if job has already completed
}

silent_background sleep 5

Na podstawie tej odpowiedzi .

Tom Hale
źródło