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”?

Odpowiedzi:


34

Uruchom polecenie w podpowłoce:

(sleep 2 &)

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”.


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ć.


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 .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.