ส่งคำสั่งไปยังเซสชันหน้าจอที่กำลังทำงานอยู่


11

ฉันพยายามส่งคำสั่งไปยังเซสชันหน้าจอ gnu ที่กำลังรัน (4.00.03) ใน opensolaris แต่ไม่สามารถเรียกใช้คำสั่งใด ๆ ผ่านการรวมกันของ screen -X

ตกลงฉันเริ่มเซสชันหน้าจอด้วยscreen -S testแล้วลองด้วยscreen -r -X "date"เพื่อแสดงวันที่ให้ฉันเมื่อฉันจะเชื่อมต่อกับมันอีกครั้ง แต่ไม่มีข้อความแสดงข้อผิดพลาดหรือผลลัพธ์ในหน้าจอ ฉันลองด้วยชุดค่าผสมมากมายที่ฉันจำไม่ได้

มีคำแนะนำเกี่ยวกับวิธีการทำให้สำเร็จหรือไม่?

เหตุผลที่ฉันทำเช่นนี้เพราะฉันมีโปรแกรมที่ไม่ได้มาเป็น daemon และฉันต้องการที่จะเริ่มต้นในหน้าจอดังนั้นฉันสามารถดูได้ในภายหลังว่าเกิดอะไรขึ้น


1
ดูเหมือนราวกับว่า "คำสั่ง" ที่พวกเขากำลังพูดถึงในหน้าคนนั้นมีความหมายสำหรับคำสั่งหน้าจอเช่นการตั้งค่าสำหรับเซสชันหน้าจอตัวเอง แทนที่จะส่งคำสั่งสำหรับเชลล์ซึ่งเปิดในเซสชันหน้าจอ ดังนั้นทุกคนมีความคิดว่าจะทำให้มันเกิดขึ้นได้อย่างไรด้วยสคริปต์ทุบตี?

@Axon: ใช่ -X ส่งคำสั่งหน้าจอไม่ใช่คำสั่งเชลล์ แต่หน้าจอมีคำสั่ง 'หน้าจอ' ซึ่งสามารถเปิดหน้าต่างหน้าจอใหม่ได้

คำตอบ:


18

จริงๆแล้วมันค่อนข้างง่าย คุณสามารถใช้สิ่งต่อไปนี้:

screen -S sessionname -X stuff 'command'`echo -ne '\015'`

echo -ne '\015'emulates กดEnterคีย์

หมายเหตุ: 'สิ่งของ' เป็นคำสั่งบนหน้าจอ http://www.gnu.org/software/screen/manual/screen.html#Stuff


คุณช่วยระบุสิ่งที่ "สิ่ง" หมายถึงอะไร นั่นคือชื่อ ... หรือคำสั่ง ... หรือพารามิเตอร์อื่น ๆ ?
Cerin

มันใช้งานได้จริง แต่ฉันจะไม่บอกว่ามันเป็นอย่างใด;) นี่คือสิ่งที่เหมือนผ่านการกดปุ่มเหตุการณ์และการขึ้นบรรทัดใหม่ไปที่หน้าจอ ไม่มีคำสั่งที่รันบนหน้าจอปกติหรือไม่?
ducin

@Cecin: stuffเป็นคำสั่งที่หน้าจอเพื่อ 'สิ่ง' สตริงเข้า stdin
คอนราด

นี่เป็นสิ่งที่ดีมาก แต่ด้วยเหตุผลบางอย่างมันไม่ทำงานกับ "screen -RdS sessionname -X stuff 'ls -l' echo -ne '\015'" ทำไม?
e271p314

สิ่งนี้ไม่ทำงานเว้นแต่ฉันจะรันคำสั่งสองครั้ง ... และแยกบรรทัดคำสั่ง ... ถ้าฉันไม่ทำscreen -d -m -S sessionname; screen -S sessionname -X [...]อะไรเลยแม้(screen -d -m -S sessionname&)&sleep 10;screen -S sessionname -X [...]จะไม่ได้ทำอะไรเลยนอกจากสร้างหน้าจอใหม่ที่ไม่ทำอะไรเลย การลงคะแนน
user3338098

5

ดูเหมือนคุณต้องการ:

$ screen -S test -d -m -c / dev / null - วันที่ sh -c '; exec $ SHELL '

-S test: ตั้งชื่อเซสชันนี้
-d -m: เริ่มต้นแยกหน้าจอ
-c / dev / null: ละเว้น ~ / .screenrc (ระบุไฟล์อื่นหรือดรอปตัวเลือกนี้
  ตามความจำเป็น)
-: ตัวเลือกสิ้นสุดหน้าจอ
วันที่ sh -c '; exec $ SHELL ': คำสั่งเพื่อให้หน้าจอทำงานได้โปรดทราบว่าหากคำสั่งนี้
  เป็นเพียง 'วันที่' จากนั้นหน้าจอจะออกทันที หากคุณไม่ต้องการออก
  หน้าจอหลังจากที่คำสั่งของคุณออกจากนั้นคุณอาจใช้:
    $ screen -S test -d -m -c / dev / null - คำสั่งของคุณที่นี่

หรือบางทีคุณอาจต้องการเพียงแค่dtach


การเรียกใช้ผลลัพธ์นี้ไม่มีอะไรเกิดขึ้น ไม่มีข้อความสำเร็จหรือข้อความscreen -listแสดงข้อผิดพลาด แต่แสดงว่าไม่มีเซสชันใดเปิดอยู่
Cerin

คำตอบนี้ใช้ได้สำหรับฉัน กุญแจสำคัญคือ - เพื่อสิ้นสุดตัวเลือกหน้าจอ
Plazgoth

1
screen -S <session_name> -X screen [-t <title>] <shell_command> [<args>]

เปิดหน้าต่างใหม่ (ที่มีชื่อชื่อ ) ในเซสชั่นชื่อที่มีอยู่session_nameและดำเนินการshell_command (มีข้อโต้แย้งไม่จำเป็นargs )

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