กำลังส่งอินพุตไปยังเซสชันหน้าจอจากภายนอก


18

สถานการณ์ของฉันคือ:

ฉันมีหน้าจอเซสชันที่ทำงานในสถานที่ห่างไกล ภายในหน้าจอนี้เป็นโปรแกรมที่ใช้คอนโซล เมื่อรันโดยไม่มีหน้าจอโปรแกรมนี้เริ่มต้นในเทอร์มินัลและยอมรับคำสั่งในอินพุตมาตรฐาน

สิ่งที่ฉันต้องการคือวิธีการส่งคำสั่งไปยังหน้าจอจากระยะไกลเพื่อให้ได้รับคำสั่งนี้โดยโปรแกรมคอนโซล อาจจะเป็นเช่นนี้:

พีซีของฉัน -> SSH ส่งข่าวสารอัตโนมัติ -> เซสชันหน้าจอ -> โปรแกรม (รับคำสั่งเรียกใช้)

ดังนั้นจากพีซีระยะไกลฉันสามารถส่งผ่านคำสั่ง SSH ไปยังหน้าจอที่ส่งไปยังโปรแกรม โปรแกรมยอมรับและดำเนินการ

คำตอบ:


17

หากฉันเข้าใจถูกต้องคุณต้องการส่งอินพุตไปยังโปรแกรมที่ทำงานภายในเซสชันหน้าจอ คุณสามารถทำได้ด้วยstuffคำสั่งของหน้าจอ ใช้-Xตัวเลือกของหน้าจอเพื่อดำเนินการคำสั่งในเซสชันหน้าจอโดยไม่ต้องแนบ

screen -S sessionname -p windowname -X stuff 'command1
command2
'

หากคุณต้องการที่จะเห็นผลลัพธ์ของโปรแกรมดูhardcopy, logและlogfileคำสั่ง


ลองใช้คำสั่ง stuff แล้ว แต่จะส่งคำสั่งที่มาจากหน้าจอเท่านั้น คุณเห็นมันยอมรับเฉพาะคำสั่งที่เกี่ยวข้องกับหน้าจอไม่ใช่โปรแกรมกำลังใช้ที่เกี่ยวข้อง
Luis Alvarado

@CYREX: stuffส่งตัวอักษรเหมือนกับที่คุณพิมพ์ คุณลองทำอะไรบ้างผลที่ตั้งใจแล้วเกิดอะไรขึ้นแทน?
Gilles 'หยุดความชั่วร้าย'

ฉันเห็นว่าคุณมีส่วน -p ฉันไม่ได้มีสิ่งนั้น เพิ่มส่วนนั้นแล้วและกำลังส่งคำสั่งทันที แต่ฉันจะกด ENTER สำหรับแต่ละคำสั่งได้อย่างไร
Luis Alvarado

พบมัน เพิ่ม $ ก่อนหน้าเครื่องหมายคำพูดและมี C เช่นทางหนี เช่นนี้ -X stuff $ 'แสดงผู้ใช้ \ n'
Luis Alvarado

@CYREX: -pเป็นสิ่งที่จำเป็น (หรืออย่างน้อยก็เป็นความคิดที่ดี) หากมีมากกว่าหนึ่งหน้าต่าง หากต้องการ“ กด Enter” เพียงใส่บรรทัดใหม่ในอาร์กิวเมนต์ (เช่นภายในเครื่องหมายคำพูด) ตามที่ฉันได้ทำไปแล้ว
Gilles 'หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.