เชื่อมต่อกับเซสชันหน้าจอ byobu และดำเนินการคำสั่งหรือไม่


9

ในสคริปต์ฉันกำลังสร้างฉันกำลังทดลองกับวิธีการอัตโนมัติให้มากที่สุด หนึ่งในความท้าทายที่น่าสนใจคือการเชื่อมต่อกับหน้าจอ byobu และดำเนินการคำสั่ง

ดังนั้นฉันจึงเริ่มต้นในสถานที่ที่ชัดเจนมองหาจำนวนเซสชันหน้าจอที่มี (เกมมี 3 windows ใน byobu และ lordquackstar มี 2 ผู้ใช้อยู่ในกรณีที่มีการแยก)

game@quackgame:~$ screen -ls
There is a screen on:
        2019.byobu      (01/05/2011 05:10:04 PM)        (Attached)
1 Socket in /var/run/screen/S-game.

มีเพียงอันเดียวที่นั่นดังนั้นฉันจึงตรวจสอบระบบ

lordquackstar@quackgame:/home/game$ sudo ls -lAR /var/run/screen/
/var/run/screen/:
total 0
drwx------ 2 game          users         100 2011-01-06 09:18 S-game
drwx------ 2 lordquackstar lordquackstar 100 2011-01-06 09:17 S-lordquackstar

/var/run/screen/S-game:
total 4
prwx------ 1 game users 0 2011-01-08 07:55 2019.byobu
-rw------- 1 game users 0 2011-01-06 09:18 byobu-exchange
-rw-r--r-- 1 game users 3 2011-01-08 07:32 byobu.updates-available

/var/run/screen/S-lordquackstar:
total 4
prwx------ 1 lordquackstar lordquackstar 0 2011-01-08 07:42 1169.byobu
-rw------- 1 lordquackstar lordquackstar 0 2011-01-06 09:17 byobu-exchange
-rw-r--r-- 1 lordquackstar lordquackstar 3 2011-01-08 07:35 byobu.updates-available

ยังไม่มีหลายหน้าจอ

ดังนั้นสำหรับคำถามของฉัน: ฉันจะเชื่อมต่อกับหน้าต่างใน byobu จากสคริปต์ได้อย่างไร


ในบันทึกที่เกี่ยวข้องเล็กน้อยเมื่อฉันเชื่อมต่อกับมันจากสคริปต์ทุบตีมีวิธีการส่งคำสั่งแล้ว detatch?


ดูเหมือนว่าผู้ใช้แต่ละคนจะมีเซสชันหน้าจอเดียว ฉันไม่คุ้นเคยกับ byobu ทำไมคุณถึงคิดว่ามีห้าเซสชันบนหน้าจอ
Gilles 'ดังนั้นหยุดความชั่วร้าย'

@Gilles การวิจัยเพิ่มเติมพบว่ามีเพียงหนึ่งเซสชันหน้าจอสำหรับผู้ใช้แต่ละคน ฉันคิดว่าสถานที่เหล่านั้นhtopแสดงกระบวนการหลายหน้าจอมากขึ้น
TheLQ

คำตอบ:


7

คุณสามารถแนบโดยตรงกับเซสชันเดี่ยวbyobu/ screenเซสชันก่อนหน้านี้รวมถึงหน้าต่าง:

byobu -r -p2

จะใส่กลับเข้าไปในหน้าต่าง 2 (หรือชื่อที่มีชื่อ)

-Xสามารถส่งคำสั่งใด ๆ ไปยังbyobu/ screenเซสชันและยังทำงานร่วมกับ-pสวิตช์

byobu -p2 -X stuff "uname -a $(echo -ne '\r')"

การดำเนินการนี้จะส่งuname -aไปยังหน้าต่าง byobu ที่สอง (อันที่สามจริง) echoในตอนท้ายจะส่งคืนค่าขนส่งเพื่อให้คำสั่งถูกเรียกใช้งาน


คุณสามารถเพิ่มบรรทัดใหม่ในตอนท้ายของสตริงไปยังเนื้อหา
Gilles 'หยุดความชั่วร้าย'

"สิ่งของ" คืออะไร การลบจะทำให้เกิดข้อผิดพลาดใน byobu "-X คำสั่งที่ไม่รู้จัก 'uanme -a'
TheLQ

มันทำสิ่งที่มันบอกว่ามัน "ยัด" คำสั่ง (ในกรณีนี้uname -a) ลงในbyobuเซสชั่น
กระดิก

อ่าไม่ได้ทำการเชื่อมต่อที่นั่น อย่างไรก็ตามขอขอบคุณสำหรับความช่วยเหลือมันทำงานได้อย่างสมบูรณ์แบบ!
TheLQ

คำสั่ง stuff ดูเหมือนว่าจะทำงานกับหน้าจอ GNU ไม่ใช่ tmux ซึ่งดูเหมือนว่าจะเป็นค่าเริ่มต้นเมื่อไม่นานมานี้
Phil Ricketts

7

คุณสามารถส่งคำสั่งไปยังหน้าต่างหน้าจอเฉพาะของเซสชันหน้าจอเฉพาะโดยไม่ต้องแนบ

screen -S sessionname -p windowname -X screencommand

ชื่อเซสชันถูกตั้งค่าด้วย-Sตัวเลือกเมื่อหน้าจอเริ่มต้นหรือsessionnameคำสั่ง; โดยค่าเริ่มต้นมันเป็นbyobubyobu นอกจากนี้คุณยังสามารถใช้ PID -Sหน้าจอหลังจาก คุณสามารถตั้งชื่อหน้าต่างด้วยtitleคำสั่ง คุณยังสามารถใช้หมายเลขหน้าต่าง

screen -S byobu -p 1 -X stuff 'ls
'

มันใช้งานได้สำหรับฉันเมื่อฉันบรรจุสตริงโดยไม่มีที่ว่าง แต่เห็นได้ชัดว่าไม่ได้ทำอะไรเลย ความคิดใด ๆ
François Beausoleil

ตกลงฉันไม่ดี พื้นที่ถูกตีความโดยการทุบตีในพื้นที่และ SSH ไม่เห็นคำสั่งเต็ม ใช้งานได้ทันที!
François Beausoleil
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.