ฉันเริ่มคำสั่งแรกในหน้าจอเช่นนี้:
screen -d -m -S testen -t lalala watch df -h
ซึ่งทำให้ฉันมีหน้าจอเซสชันที่ทำงานในพื้นหลังและฉันสามารถเชื่อมต่ออีกครั้งในภายหลัง
ฉันจะรันคำสั่งที่สองในหน้าต่างใหม่ในเซสชันหน้าจอเดียวกันได้อย่างไร
ฉันเริ่มคำสั่งแรกในหน้าจอเช่นนี้:
screen -d -m -S testen -t lalala watch df -h
ซึ่งทำให้ฉันมีหน้าจอเซสชันที่ทำงานในพื้นหลังและฉันสามารถเชื่อมต่ออีกครั้งในภายหลัง
ฉันจะรันคำสั่งที่สองในหน้าต่างใหม่ในเซสชันหน้าจอเดียวกันได้อย่างไร
คำตอบ:
เริ่มเซสชันหน้าจอที่ตั้งชื่อ ( -S
) ด้วยหน้าต่างที่มีชื่อ ( -t
) ปรับให้เข้ากับขนาดเทอร์มินัล ( -A
) ในโหมดเดี่ยว ( -d -m
):
screen -S mySessionName -t myWinName0 -A -d -m
เริ่มหน้าต่างใหม่ที่ชื่อว่า ( -t
) ในเซสชันหน้าจอเดียวกัน ( -S
):
screen -S mySessionName -X screen -t myWinName2
บันทึกคำสั่ง ( -X stuff $'cmds'
) ลงในหน้าต่างที่มีชื่อแรก ( -p
) ในเซสชัน ( -S
):
screen -S mySessionName -p myWinName0 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
บันทึกคำสั่ง ( -X stuff $'cmds'
) ลงในหน้าต่างที่มีชื่อสอง ( -p
) ในเซสชัน ( -S
):
screen -S mySessionName -p myWinName1 -X stuff $'echo myWinName1\necho cmd1\necho cmd2\n'
รายการเซสชันหน้าจอและใส่กลับเข้าไปใหม่เพื่อดูว่าเกิดอะไรขึ้น:
screen -ls
screen -r mySessionName
หมายเหตุ: การเลื่อนบรรทัด ( \n
) Enterจำลองการกด คุณสามารถใช้เครื่องหมายอัฒภาคเพื่อแยกคำสั่งได้เช่นกัน
หน้าจอภายใน:
:screen newcmd
การเรียกใช้newcmd
ภายนอก:
screen -X testen "screen newcmd"
พยายามใช้วิธีการด้านบน แต่คำสั่งที่สองไม่ได้ทำงานในหน้าต่างที่สอง ฉันปรับตัวอย่างเล็กน้อยโดยใช้หมายเลขหน้าต่างแทนชื่อหน้าต่าง:
สร้างเซสชัน
screen -S mySessionName -t 0 -A -d -m
สร้างหน้าต่างที่สอง
screen -S mySessionName -X screen -t 1
ส่งคำสั่งไปที่หน้าต่างแรก
screen -S mySessionName -p 0 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
ส่งคำสั่งไปที่หน้าต่างที่สอง
screen -S mySessionName -p 1 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
ตอนนี้ตรวจสอบว่าคำสั่งถูก runned ในหน้าต่างแรก
screen -R mySessionName -p 0
ตอนนี้ตรวจสอบว่าคำสั่งถูก runned ในหน้าต่างที่สอง
screen -R mySessionName -p 1
ทดสอบกับหน้าจอ 4.00.03 (CENTOS 6.3 x64)
คุณสามารถตั้งค่า. screenrc ทางเลือกผ่านการ-c
โต้แย้ง ใน screenrc ใหม่นี้คุณสามารถตั้งค่าหลายคำสั่งให้เริ่มเมื่อหน้าจอเริ่มต้นเซสชัน
ในตอนท้ายของทางเลือก. screenrc นี้ให้ใส่คำสั่งต่อไปนี้:
screen 1 cmd1 args
screen 2 cmd2 args
คุณไม่จำเป็นต้องติดตั้งไฟล์กำหนดค่าอื่นหากคุณวางแผนที่จะเรียกใช้เซสชั่นหน้าจอหนึ่งประเภทเท่านั้นและคำสั่งเริ่มต้นที่รันจะทำงานได้ดี
screen -S sessionName -t windowName1 -Adm <command> && screen -S sessionName -X screen -t windowName2 -Adm <command2>