ใช่ $ (ใช่ใช่) ทำอะไร?


23

สงสัยว่าใช้yesคำสั่งใดฉันอาจสะดุดความคิดเห็นนี้และพยายามที่จะดำเนินการ

yes $(yes yes)

จากสิ่งที่ฉันเข้าใจนี่ควรพิมพ์ลำดับที่ไม่มีที่สิ้นสุดyesแต่กลับไม่มีอะไรออกมาและทำให้จอเทอร์มินัลกราฟิกของฉันล้มเหลวหลังจากนั้นไม่กี่วินาที (ถ้าฉันรันบน tty1 ฉันจะเห็นพร้อมต์ล็อกอินหลังจากผ่านไประยะหนึ่ง)

เกิดอะไรขึ้นที่นี่


2
ฉันไม่ใช่ผู้เชี่ยวชาญ แต่อาจเป็นไปได้ว่าการขอร้องครั้งแรกกำลังพยายามพิมพ์อนันต์ครั้ง (หรือการโต้แย้งอาจยาวเกินไป)
strugee

5
@strugee รายการอาร์กิวเมนต์ไม่เคยถูกเติมเพราะyesไม่ส่งคืน
Chris Down

@strugee คุณสามารถรับ "อนันต์ครั้งอนันต์" โดยใช้xargs: yes yes | xargs -P 0 yes(หรือไม่มี-P 0อินฟินิตี้กระบวนการเดียว)
Kyle Strand

คำตอบ:


25

มันควรจะเพียงพอแล้วที่จะเรียกใช้

 echo $(yes yes)

$(...)รันคำสั่งภายในจนกว่าจะเสร็จสิ้นแล้วและจับทั้งหมดเอาท์พุท - ขณะที่yesรันเป็นเวลานานและสร้างเอาต์พุตจำนวนมากทุบตีในที่สุดก็จะหมดหน่วยความจำและเกิดความผิดพลาด


6

ในการดูข้อความสำหรับข้อผิดพลาดที่ปิดเชลล์ของคุณคุณต้องเรียกใช้งานเชลล์ย่อย

$ sh
$ kill -9 $$
Killed
$

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

1
16 ล้านกิกะไบต์ใช่มั้ย กอร์ดอนมัวร์ที่ซุ่มซ่อนอยู่ในมุมไป "อืม ... ผมหมายถึงไม่มากเลย ..."
FeRD
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.