Що робить так (так, так)?


23

Цікаво, якою yesможе бути команда, я натрапив на цей коментар і спробував виконати

yes $(yes yes)

Наскільки я розумію, це треба просто роздрукувати нескінченну послідовність yes, але замість цього він не виводить нічого і виходить з ладу мого графічного терміналу через кілька секунд. (Якщо я виконую його на tty1, я бачу запит на вхід через деякий час.)

Що тут відбувається?


2
Я не експерт, але можливо, що перший виклик намагається надрукувати нескінченність нескінченних разів. (або аргумент може бути занадто довгим.)
strugee

5
@strugee Список аргументів ніколи не заповнюється, тому що yesніколи не повертається.
Кріс Даун

@strugee Ви можете отримати "нескінченний час нескінченності", використовуючи xargs: yes yes | xargs -P 0 yes(або без -P 0однократної нескінченності)
Kyle Strand

Відповіді:


25

Це вже повинно вистачити для запуску

 echo $(yes yes)

$(...)Запускає внутрішню команду , поки вона не буде закінчена , і захоплює всю свою продукцію. - Тепер, оскільки yesпрацює тривалий час і генерується багато результатів, в результаті, bash закінчиться в пам'яті та вийде з ладу.


6

Щоб побачити повідомлення про помилку, яка закриває вашу оболонку, вам потрібно запустити під оболонку.

$ sh
$ kill -9 $$
Killed
$

$ sh
$ yes $(yes yes)
sh: xrealloc: cannot allocate 18446744071562067968 bytes
$

1
16 мільйонів гігабайт, так? Гордон Мур ховається в кутку йде, «Ну ... Я маю в виду, не зовсім ще ...»
FERD
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.