เรียกใช้โปรแกรมด้วยหน้าจอ GNU และแยกออกทันที


27

ฉันพยายามหาวิธีเขียนสคริปต์ซึ่งจะเริ่มโปรแกรมในหน้าจอ GNU ที่บูตระบบ ฉันพยายามทำสิ่งนี้:

#!/bin/bash
screen -S test -d -m -X $HOME/folder/folder/.program \
screen -S test2 -d -m -X $HOME/folder/folder/.program2 \

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

ขอบคุณสำหรับคำตอบ แต่ตอนนี้ฉันประสบปัญหาอื่น สคริปต์หยุดทำงานหลังจากที่ฉันวางตัวแปรบางอย่างสำหรับ "โปรแกรมและ program2" ของฉัน บางสิ่งเช่นนี้

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program -f config.cfg

ด้วยเหตุผลบางอย่าง "-f config.cfg" จึงถูกเพิกเฉย ฉันยังพยายามพูดคำสั่งและไม่ช่วยด้วย


ทำไมต้อง-Xเลือก
enzotib

คำตอบ:


34

คุณหมายถึงการวาง\ที่ท้ายบรรทัดหรือไม่? ถ้าไม่ลองลบพวกมันออก - พวกมันจะหนีจากตัวละครต่อไป

นอกจากนี้การดรอปยัง-Xช่วยให้การติดตั้งใช้งานได้สำหรับฉันเช่น:

screen -S test -d -m -X touch /tmp/test

ล้มเหลวด้วยNo screen session foundอย่างไรก็ตาม:

screen -S test -d -m touch /tmp/test

ทำงานได้ดี เช่นนี้ฉันสงสัยว่าสิ่งต่อไปนี้จะได้ผลสำหรับคุณ:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program
screen -S test2 -d -m $HOME/folder/folder/.program2

โปรดจำไว้ว่าหากคุณเรียกใช้ในเวลาบูต $ HOME จะไม่เหมือนกันหลังจากคุณลงชื่อเข้าใช้ในฐานะผู้ใช้ที่ระบุ หากคุณต้องการเรียกใช้ในฐานะผู้ใช้บางคนคุณจะต้องใช้ไลค์suเพื่อเรียกใช้ในฐานะผู้ใช้นั้นและการระบุพา ธ แบบเต็มจะเป็นการลบความกำกวมใด ๆ :

#!/bin/bash
screen -S test -d -m su - username /home/username/folder/folder/.program
screen -S test2 -d -m su - username /home/username/folder/folder/.program2

su - username /path/to/your/scriptหรือคุณจะเรียกสคริปต์ทั้งหมดข้างต้น


ขอบคุณสำหรับคำตอบ แต่ตอนนี้ฉันประสบปัญหาอื่น สคริปต์หยุดทำงานหลังจากที่ฉันวางตัวแปรบางอย่างสำหรับ "โปรแกรมและ
program2

สิ่งนี้: screen -S test -d -m $HOME/folder/folder/.programทำสิ่งที่ฉันกำลังค้นหาเกือบทั้งหมดยกเว้นว่าโฟลเดอร์ / .program เสร็จสิ้นเซสชันหน้าจอจะปิดโดยอัตโนมัติ มีวิธีใดบ้างที่จะทำให้เซสชั่นหน้าจอ (เชลล์) ทำงานแม้หลังจากที่โปรแกรมเสร็จสิ้นไปแล้ว? บางทีแทนที่จะเรียกใช้โปรแกรมโดยเฉพาะเริ่มเชลล์ที่เริ่มโปรแกรมแล้วกลับไปที่ shell prompt หรืออะไร?
RocketNuts

4

เช่นเดียวกับ Cry Havok ที่กล่าวถึงคุณสามารถวางโปรแกรมไว้บนบรรทัดคำสั่ง

หากคุณต้องใช้ตัวเลือก -X จริงๆก) คุณต้องระบุคำสั่ง 'หน้าจอ' และ b) เซสชันต้องมีอยู่ก่อน

screen -dmS test
screen -S test -X screen $HOME/folder/folder/.program
screen -dmS test2
screen -S test2 -X screen $HOME/folder/folder/.program2

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

คำตอบนี้จะคล้ายกับคำตอบ stackoverflow.comซึ่งคำตอบคำถามที่คล้ายกัน ฉันชอบคำตอบนี้มากกว่า @CryHavok เพราะคำตอบนี้รันโปรแกรมของคุณภายในเชลล์เริ่มต้นของผู้ใช้ (@CryHavok รันโปรแกรมของคุณโดยไม่มีเชลล์หลักดังนั้นเมื่อโปรแกรมตายหรือคุณ ctrl-c เซสชันเซสชันหน้าจอจะสิ้นสุดลงทันที)
Trevor Boyd สมิ ธ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.