วิธีการรับเอาท์พุทภายใน "screen" ออกไปยังสคริปต์


33

ฉันมีscreenอินสแตนซ์กำลังทำงานอยู่และฉันจะต้องเรียกใช้รหัสบางอย่างภายในscreenและรับผลลัพธ์จากสคริปต์ของฉัน

screen -S session_name -X eval 'stuff "$cmd"\015'ส่วนแรกเป็นเรื่องง่ายมากผมก็
(ฉันแก้ไขบรรทัดที่พบในสคริปต์ )

ส่วนที่สองออกไปทางเอาท์พุทยากกว่า ฉันจะได้รับผลงานทั้งหมดได้ขนาดเท่าไหร่


1
ที่เกี่ยวข้อง: คำอธิบายของscreen -X stuff … ; คำถามที่คล้ายกันกับคุณ
Gilles 'ดังนั้นหยุดความชั่วร้าย'

ขอบคุณ :) ลิงก์ที่สองได้รับการอธิบายว่าทำไมต้องมีคำสั่งแรกstuffซึ่งเป็นสิ่งที่ฉันมีปัญหาในการทำความเข้าใจ
1ace

คำตอบ:


29

คุณสามารถเริ่มต้นscreenด้วย-Lตัวเลือก สิ่งนี้จะทำให้หน้าจอสร้างไฟล์screenlog.n(ส่วนที่ n เป็นตัวเลขเริ่มต้นด้วยศูนย์) ในไดเรกทอรีการทำงานปัจจุบัน

ในกรณีของคุณสิ่งนี้จะมีลักษณะดังนี้: screen -S session_name -L -X eval 'stuff "$cmd"\015'

ตราบใดที่คุณจำได้ว่าต้องทำความสะอาดหลังจากนั้นสิ่งนี้ควรตรงกับสิ่งที่คุณเป็น

สำหรับบรรทัดสุดท้ายของบันทึกสามารถหาได้ง่ายtail -1 screenlog.0หรือบันทึกทั้งหมดสามารถแยกวิเคราะห์ได้ตามที่คุณต้องการ


สิ่งหนึ่งที่: screenคำสั่งที่ฉันให้ไว้คือส่งคำสั่งเท่านั้นเพื่อเริ่มต้นscreenฉันใช้screen -dmS name program;-)
1ace

22

ความแตกต่างอีกอย่างหนึ่งที่อาจเป็นประโยชน์ในอนาคต: หากคุณอยู่ในเซสชันหน้าจอคุณสามารถขอให้สร้างไฟล์บันทึกแบบโต้ตอบได้ กดctrl- a H(Control-A ตามด้วยตัวอักษร H) เพื่อขอให้หน้าจอเริ่มทิ้งหน้าต่างใดก็ตามที่คุณอยู่ในไฟล์บันทึก


5
ไม่ทราบว่าเป็นเพราะรุ่นที่ใหม่กว่าหรือไม่ แต่ฉันman screenบอกว่าฉันต้องพิมพ์ CA H โดยไม่ต้องมีการควบคุมสำหรับ H. Sad เท่านั้นนั่นไม่ใช่การบันทึกก่อนหน้านี้
Matmarbon

2
คุณถูก! เป็น CA H เพื่อสร้างไฟล์บันทึก โปรดทราบว่ามันเป็นทุน H (ตัวพิมพ์เล็ก h สร้างเพียงสำเนาหน้าจอปัจจุบัน)
rickumali

3
โปรดอัปเดตคำตอบเป็น CA H. ผู้ค้นหาในอนาคตอาจเข้าใจผิดและพลาดคำตอบที่ถูกต้อง
gc5

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