예 $ (예 예)는 무엇을합니까?


23

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

yes $(yes yes)

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

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


2
나는 전문가는 아니지만 첫 번째 호출이 무한한 시간을 인쇄하려고 할 수 있습니다. (또는 논쟁이 단순히 너무 길 수도 있습니다.)
strugee

5
@strugee 인수 목록은 yes절대 반환 되지 않으므로 채워 지지 않습니다.
Chris Down

@strugee 다음을 사용하여 "무한 무한 시간"을 얻을 수 있습니다 xargs: yes yes | xargs -P 0 yes(없이 또는 -P 0단일 프로세스 무한대)
카일 스트랜드

답변:


25

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

 echo $(yes yes)

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


6

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

$ sh
$ kill -9 $$
Killed
$

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

1
1600 만 기가 바이트? 고든 무어 (Gordon Moore)는 "음 ... 나는 꽤 의미가는 구석에 숨어 아직 ..."
FeRD
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.