วิ่งวงวนไม่สิ้นสุดในเทอร์มินัลโดยไม่รู้ตัว


9

ฉันคัดลอกโค้ดด้านล่างจากแหล่งสุ่มไปยังเทอร์มินัลของฉันแล้ววิ่ง:

while sleep 1;
  do tput sc;
  tput cup 0 $(($(tput cols)-29));
  date;
  tput rc;
done &

รหัสคือการแสดงนาฬิกาวิ่งที่มุมขวาบนของเครื่อง ตัวอย่างทำงานได้ดีมากและทำในสิ่งที่ฉันต้องการ แต่ตอนนี้ฉันแค่อยากจะจบวงนี้และกำจัดนาฬิกา

นอกจากนี้ฉันต้องเข้าใจรหัสข้างต้น ฉันมีความคิดบางอย่างที่ฉันรู้ว่าtputคำสั่งทำอะไร แต่ก็ยังมีหลายจุดที่ฉันไม่สามารถเชื่อมต่อได้


1
คุณสามารถเรียกใช้ในเซสชั่นของคุณในรายการงานพื้นหลังที่ใช้งานแล้วนำไปเบื้องหน้าโดยการพิมพ์jobs fg <job number>หลังจากพิมพ์ Ctrl + C เพื่อหยุดการวนซ้ำไม่สิ้นสุด สถานการณ์นี้ทำงานเฉพาะในเทอร์มินัลที่เรียกใช้ข้อมูลโค้ด
Yurij Goncharuk

ขอบคุณมากวิธีที่สะอาดในการกำจัดลูป นี่ควรเป็นคำตอบที่ยอมรับได้
Kartik Chauhan

ยินดี! ฉันใส่มันเป็นคำตอบร้อง
Yurij Goncharuk

1
โปรดทราบว่าการปิดหน้าต่างเทอร์มินัลจะเป็นการยกเลิกงานที่รันอยู่ทั้งหมดที่แนบอยู่ด้วย
trlkly

คุณมีสองคำถามที่นี่ คุณแบ่งคำถามที่ 2 ออกเป็นคำถามใหม่ได้ไหม
ctrl-alt-delor

คำตอบ:


15

คุณสามารถเรียกใช้คำสั่งในเซสชั่นของคุณในรายการงานพื้นหลังที่ใช้งานแล้วนำพวกเขาไปเบื้องหน้าโดยการพิมพ์jobs fg <job number>จากนั้นพิมพ์Ctrl+ Cเพื่อหยุดการวนซ้ำไม่สิ้นสุด

สถานการณ์นี้ทำงานเฉพาะในเทอร์มินัลที่เรียกใช้ข้อมูลโค้ด


คำอธิบาย:

tput sc - บันทึกตำแหน่งเคอร์เซอร์

tput cup 0 $(($(tput cols)-29))- เลื่อนเคอร์เซอร์ไปที่ตำแหน่ง0ของแกน Y และ(count of screen columns minus 29)แกน X

date - เพียงพิมพ์วันที่ปัจจุบัน

tput rc - กู้คืนตำแหน่งเคอร์เซอร์

while sleep 1; ... do ... ; done - วนซ้ำที่มีความล่าช้า 1 วินาที

พิมพ์help whileเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับการwhileวนรอบในเชลล์และติดตามman 1 tputหรือtldp tput docเพื่อทราบวิธีการทำงานของ tput


ฉันยังอยากรู้ว่ารหัสทำในสิ่งที่ทำอย่างไร
Kartik Chauhan

@ KartikChauhan ฉันใส่คำอธิบายบางอย่างด้วย
Yurij Goncharuk

@KartikChauhan คุณพูดถูก! ขอขอบคุณ! ฉันเพิ่งแก้ไขสิ่งนี้
Yurij Goncharuk

3
kill %1(หรือหมายเลขอื่นถ้ามีหลายงาน) เป็นทางเลือกสำหรับfg+Ctrl-C
Roman Odaisky
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.