Zastanawiając się, do czego yes
może służyć polecenie, natknąłem się na ten komentarz i spróbowałem go wykonać
yes $(yes yes)
Z tego, co rozumiem, powinno to po prostu wydrukować nieskończoną sekwencję yes
, ale zamiast tego nic nie wyprowadza i po kilku sekundach zawiesza mój terminal graficzny. (Jeśli wykonam to na tty1, po pewnym czasie widzę monit o zalogowanie).
Co tu się dzieje?
yes
nigdy nie zwraca.xargs
:yes yes | xargs -P 0 yes
(lub bez-P 0
dla nieskończoności jednoprocesowej)Odpowiedzi:
Powinno już wystarczyć
$(...)
Uruchamia polecenie wewnętrzne, dopóki nie zostanie zakończone i przechwytuje wszystkie swoje wyjście. - Teraz, gdyyes
działa długo i generuje dużo danych wyjściowych, bash w końcu zabraknie pamięci i ulegnie awarii.źródło
Aby zobaczyć komunikat o błędzie zamykającym powłokę, musisz uruchomić podpowłokę.
źródło