예 $ (예 예)는 무엇을합니까? yes출력해야하지만 대신

yes명령을 사용하는 것이 궁금 할 때이 의견을 우연히 발견하고 실행하려고했습니다.

yes $(yes yes)

내가 이해 한 바에 따르면, 이것은 단순히 무한 시퀀스를 yes출력해야하지만 대신 아무것도 출력하지 않고 몇 초 후에 그래픽 터미널이 충돌합니다. (tty1에서 실행하면 얼마 후 로그인 프롬프트가 표시됩니다.)

여기서 무슨 일이 일어나고 있습니까?



답변

이미 실행하기에 충분해야합니다

 echo $(yes yes)

$(...)이 모든 출력을 완료하고 캡처 할 때까지 내부 명령을 실행합니다. -이제 yes오랜 시간 동안 실행하고 많은 출력을 생성함에 따라 bash는 결국 메모리가 부족하고 충돌합니다.


답변

쉘을 닫는 오류에 대한 메시지를 보려면 서브 쉘을 실행해야합니다.

$ sh
$ kill -9 $$
Killed
$

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