หน้าจอ GNU: ไม่สามารถใช้คำสั่งคัดลอกข้อมูลได้ยกเว้นว่ามีการแนบหน้าจอหรือไม่


10

ฉันมีสคริปต์ต่อไปนี้

screen -d -m -S $1                #start screen minimized
screen -S $1 -X stuff "$beast     
"                                 #stuff commands

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

คำตอบ:


14

เมื่อคุณเริ่มเซสชันหน้าจอในโหมดแยกออก ( screen -d -m) จะไม่มีหน้าต่างใดถูกเลือกดังนั้นอินพุตที่ส่งในภายหลังด้วยscreen -X stuffจะหายไป คุณต้องระบุอย่างชัดเจนว่าคุณต้องการส่งการกดแป้นไปที่หน้าต่าง 0 ( -p 0) นี่เป็นความคิดที่ดีอยู่แล้วในกรณีที่คุณสร้างหน้าต่างอื่น ๆ ในเซสชันหน้าจอนั้นไม่ว่าด้วยเหตุผลใดก็ตาม

screen -S "$1" -p 0 -X stuff "$beast$(printf \\r)"

( printf \\rเพื่อจำลองReturnคีย์อย่างเคร่งครัดโปรแกรมส่วนใหญ่ แต่ไม่ใช่ทุกโปรแกรมจะยอมรับการขึ้นบรรทัดใหม่ ( \n))


ขอบคุณ! มันใช้งานได้สมบูรณ์แบบ ขออภัยทุกคนที่อยู่นอกหัวข้อ
dukevin

ไม่ได้ผลสำหรับฉัน
แทนเนอร์ Strunk

2

เมื่อเร็ว ๆ นี้ขึ้นมาในขณะที่พยายามที่จะตอบคำถามเกี่ยวกับ unix.stackexchange.com

สรุปคือหน้าจอไม่มีหน้าต่างที่เลือกไว้เป็นค่าเริ่มต้นเว้นแต่ว่าคุณจะทำการตบตา แต่ Gilles แสดงให้เราเห็นว่าคุณสามารถบังคับให้เลือกหนึ่งรายการได้อย่างไรโดยการเพิ่มอาร์กิวเมนต์-p 0ให้กับคำสั่งหน้าจอของคุณ

ส่วนตัวผมแนะนำให้เปลี่ยนไปtmuxใช้ นี่คือวิธีที่คุณจะพอร์ตคำสั่งหน้าจอของคุณให้ทำงานใน tmux:

tmux new-session -d -n $1
tmux send-keys -t $1 "$beast\n"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.