เป็นไปได้ไหมที่สคริปต์จะบอกได้ว่ามันถูกเรียกใช้จากภายในหน้าจอ GNU หรือไม่?


10

เรามีกระบวนการทำงานที่ยาวนานบนเซิร์ฟเวอร์ระยะไกลซึ่งถูกเตะด้วยตนเองเป็นครั้งคราว โชคไม่ดีที่การเชื่อมต่ออินเทอร์เน็ตตายความตื่นตระหนกและความท้าทายอื่น ๆ ทั้งหมดสามารถพบได้ในเซสชัน ssh ที่ใช้ในการเชื่อมต่อและเริ่มงาน

หน้าจอดูเหมือนเป็นวิธีที่สมบูรณ์แบบเพื่อให้แน่ใจว่ากระบวนการไม่ถูกขัดจังหวะ อย่างไรก็ตามการพึ่งพาบุคคลให้จำหน้าจอเริ่มต้นเสมอจากนั้นเรียกใช้สคริปต์เพื่อเริ่มกระบวนการเป็นปัญหาที่รอให้เกิดขึ้น มีวิธีจากสคริปต์ที่ฉันสามารถตรวจสอบเพื่อดูว่าสคริปต์นั้นถูกเรียกจากภายในหน้าจอหรือไม่? หากเป็นกระบวนการที่จะดำเนินการต่อมิฉะนั้นสคริปต์จะออกด้วยข้อความบอกให้ผู้ใช้เรียกใช้หน้าจอก่อน


คำตอบ:


11

มีตัวแปรสภาพแวดล้อมสำหรับสิ่งนั้น ถ้ามันจะถูกเรียกใช้ภายในหน้าจอจะเป็น$TERM screenมันง่ายมาก เพียงทำถ้ามัน ตัวอย่างเช่น

if [ $TERM != 'screen' ]; then echo foo; else echo bar; fi

จะสะท้อนแถบเมื่ออยู่ในหน้าจอ; foo เป็นอย่างอื่น


2
อาจเป็นได้screen-256colorหากผู้ใช้กำหนดค่าการรองรับ 256 สี
mgorven

หรือ screen-bce บนระบบที่ติดตั้ง byobu echo $ TERM screen-
bce

7

ขณะที่คุณกำลังทำงานกับหน้าจอทำไมไม่เรียกใช้สคริปต์ด้วย 'nohup' สิ่งนี้จะช่วยให้มั่นใจว่ามันจะยังคงทำงานต่อไปหากคุณถูกตัดการเชื่อมต่อ

มันส่งออกไปยังไฟล์โดยค่าเริ่มต้นเพื่อให้คุณสามารถใช้เครื่องมืออื่น ๆ เพื่อตรวจสอบการส่งออกสคริปต์หากคุณต้องการ


1
ในขณะที่ทำงานด้วย nohup จะได้ผลลัพธ์เดียวกันในการรับรองว่ากระบวนการยังคงทำงานต่อไปฉันจะยังไม่มีปัญหาเดียวกันกับบางคนที่อาจลืมรันสคริปต์ด้วย nohup หรือไม่ หรือมีวิธีในสคริปต์เพื่อให้มั่นใจว่า 'nohup' ถูกใช้หรือฉันต้องการสร้างสคริปต์ตัวคลุมซึ่งเรียกสคริปต์ต้นฉบับของฉันด้วย nohup หรือไม่?
cclark

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