สลับระหว่างเซสชันเสมือนอย่างรวดเร็ว (หน้าจอหรือไม่)


19

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

คำตอบ:


22

เพียงเพื่อขยายสิ่งที่ Ansgar พูดในกรณีที่คุณไม่คุ้นเคยกับหน้าจอ gnu มากการมี "windows" หลายรายการในหน้าจอเดียวจะทำให้สิ่งที่คุณต้องการสำเร็จ

ctrl+ a, cจะสร้างใหม่ "หน้าต่าง" ในเซสชั่นหน้าจอที่ใช้งานของคุณ คุณสามารถสลับระหว่างหน้าต่างหลายบาน (ตามที่ระบุใน Ansgar) ด้วยctrl+ a, nสำหรับหน้าต่างถัดไปและctrl+ a, pสำหรับหน้าต่างก่อนหน้า

ctrl+ a, "จะให้รายการของหน้าต่างที่เปิดอยู่ทั้งหมดของคุณ

การใช้ทางลัดง่าย ๆ เหล่านี้จะช่วยให้คุณสลับระหว่างเทอร์มินัลต่างๆอย่างรวดเร็วและง่ายดายบรรลุเป้าหมายโดยไม่ต้องใช้หน้าจอหลายเซสชัน

หากคุณเพิ่มบรรทัดต่อไปนี้ลงใน ~ / .screenrc มันจะแสดงหน้าต่างที่เปิดอยู่ของคุณเสมอและหน้าต่างใดที่เลือกไว้ดังนั้นคุณไม่จำเป็นต้องติดตามหน้าต่างที่คุณเปิดอยู่ด้วยการจดจำ

hardstatus alwayslastline '%{= kg}[ %{G}%H %{g}][%= %{= kB}%?%-Lw%?%{+b r}(%{G}%n*%f %t%?(%u)%?%{r})%{-b B}%?%+Lw%?%?%= %{g}%]'

นี่คือบรรทัด hardstatus ที่ฉันชอบที่จะใช้ แต่ก็สามารถปรับแต่งได้อย่างสมบูรณ์ (ดูหน้าคนหรือค้นหา google สำหรับ "gnu screen hardstatus")

มีอีกหลายสิ่งที่คุณสามารถทำได้ (ยกตัวอย่างหน้าต่างที่แตกต่างกัน) ดังนั้นจึงควรอ่านบทเรียนบางอย่าง

นี่คือคู่ที่ฉันพบด้วยการค้นหาอย่างรวดเร็ว:

http://news.softpedia.com/news/GNU-Screen-Tutorial-44274.shtml

http://www.ibm.com/developerworks/aix/library/au-gnu_screen/

และแน่นอนประโยชน์ที่สุดของทั้งหมด:

# From your terminal:
$ man screen

หวังว่าจะช่วย

แมทธิว


2

ใช่screenเป็นไปได้มากที่สุด Ctrl+ a, nจะนำคุณไปยังหน้าต่างถัดไปCtrl+ a, pไปก่อนหน้านี้หนึ่ง Ctrl+ a, 0.. 9จะอนุญาตให้คุณสลับไปที่หน้าจอเฉพาะ


คุณสามารถตั้งค่าการโยงคีย์เร็วกว่าเช่น F11 สำหรับก่อนหน้า F12 สำหรับหน้าต่างถัดไป และเปลี่ยนลักษณะการหลบหนีจากหน้าจอ^aเป็นอย่างอื่นดังนั้นจึงไม่น่ารำคาญอย่างยิ่งที่จะใช้ไลน์สไตล์ emacs ในการทุบตีสิ่งอื่น ^tฉันใช้
Peter Cordes

1

สิ่งที่คนอื่นพูดถูกต้อง ผมแค่อยากจะพูดถึงเป็นทางเลือกให้tmux screenพวกเขามีคำสั่งที่คล้ายกันมาก

ทั้งสองscreenและtmuxเสนอ windows หลายบานสำหรับเซสชันที่กำลังทำงานอยู่และนี่อาจเป็นสิ่งที่คุณต้องการ tmuxนอกจากนี้ยังมีการกระโดดระหว่างหลายเซสชัน (แต่ละห้องมีหน้าต่างของตัวเอง) คุณต้องการสิ่งนั้นน้อยมาก

นี่คือการเชื่อมโยงบางเอกสารที่มี หน้าจอและหลักสูตรความผิดพลาดเกี่ยวกับtmux


1

หลังจากเวลาผ่านไปนานมากฉันได้ทำสคริปต์เพื่อแก้ไขคุณสมบัติที่ขาดหายไปนี้อย่างสมบูรณ์ ก่อนอื่นต้องมีฟีเจอร์:

mkdir ~/.screen
mkfifo ~/.screen/pipe

ไพพ์ที่มีชื่อนี้มีประโยชน์สำหรับการสื่อสารระหว่างเซสชันที่ถูกถอดออกและเซสชัน "Main-without-screen"

ไฟล์sc (ใน $ PATH):

#!/bin/bash
CONFIGFILE=~/.screen/"$1""rc"

if [ ! -r $CONFIGFILE ] ; then
   echo "Configurazione per $1 Assente" >&2
   exit 1
fi

exec 3<> ~/.screen/pipe

if [ "$STY" != "" ] ; then
   screen -d "$STY"
   echo "$1" >&3
else
   screen -r "$1" 2>/dev/null || screen -S "$1" -c $CONFIGFILE
   while true ; do
      read line <&3
      screen -r "$line" 2>/dev/null || screen -S "$line" -c ~/.screen/"$line""rc"
   done
fi

ตัวอย่างของ "CONFIGFILE" คือ: ~ / .screen / Monitorrc

layout new Monitor

screen -t "bash" bash --login
split -v
focus next
split 
focus bottom
screen -t "cv" sh -c "watch /usr/bin/cv -w"
split
focus bottom
screen -t "sys.log" sh -c "tail -F /var/log/sys.log"
focus up
focus up
resize 25
screen -t "top" sh -c "top"
focus left

ผลลัพธ์คือ: เมื่อคุณต้องการเปิดประเภทหน้าจอ:

sc Monitor

หรืออีกเซสชั่นอื่น ๆ ที่คุณต้องการคิดค้นฉันใช้งานเซสชันสำหรับสิ่งต่างๆ

เช่น ~ / .screen / Workrc

layout new Work  
screen -t "bash" bash --login  

ตอนนี้เราอยู่ในการตรวจสอบเซสชั่นเมื่อเราพิมพ์:

sc Work

การตรวจสอบเซสชั่นแยกตัวและเขียน "งาน" ไปที่ namedpipe ดังนั้นสคริปต์ sc แรกก็ดำเนินการต่อและแนบเซสชัน "งาน"
sc ที่ถูกเรียกใช้จากการมอนิเตอร์เซสชั่นปิด

เมื่อเราแยกเซสชันทั้งหมดเราอยู่ในวงวนไม่สิ้นสุดดังนั้นเราต้องกด Ctrl-c เพื่อออก


1

คุณสามารถทำได้ด้วยเชลล์สคริปต์แบบง่ายๆ

    for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done 
  1. สมมติว่าคุณเปิดหน้าจอน้อย ให้ถือว่าคุณจัดหมวดหมู่เป็นงานและข้อมูล

    for i in {10..13}; do screen -S `printf data%02d $i`; done;
    for i in {0..5}; do screen -S `printf work%02d $i`; done;
    ...
    
  2. ใช้screen -lsคุณควรมีหน้าจอของคุณเช่นนี้

    There are screens on:
        81592.data13    (Detached)
        81539.work04    (Detached)
        81527.work02    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81533.work03    (Detached)
        81488.work00    (Detached)
        81607.ttys014.Mo    (Attached)
        81545.work05    (Detached)
        81580.data11    (Detached)
        81521.work01    (Detached)
        81515.work00    (Detached)
    12 Sockets in /var/folders/qs/cvlbhpr54fnb96vtx01bs9k00000gn/T/.screen.
    
  3. grepตอนนี้ช่วยให้หน้าจอแยกเดี่ยวใช้

    screen -ls | grep Detached
    

คุณควรได้รับสิ่งนี้

        81592.data13    (Detached)
        81539.work04    (Detached)
        81527.work02    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81533.work03    (Detached)
        81488.work00    (Detached)
        81545.work05    (Detached)
        81580.data11    (Detached)
        81521.work01    (Detached)
        81515.work00    (Detached)
  1. ตอนนี้ให้เลือกคนที่คุณต้องการ (เช่นข้อมูล) grepอีกครั้งโดยใช้

    screen -ls | grep Detached | grep data
    

สิ่งนี้จะแยกเฉพาะหน้าจอข้อมูล คุณสามารถเปลี่ยนคำหลัก grep ด้วยนิพจน์ทั่วไปเพื่อค้นหาเพื่อปรับแต่งการค้นหาของคุณ

        81592.data13    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81580.data11    (Detached)
  1. โชคดีที่ผลลัพธ์มีโครงสร้างที่ดีและคั่นด้วยแท็บ ตอนนี้ให้แยกคอลัมน์ลงในเขตและเลือกสนามที่ 2 cutโดยใช้

    screen -ls | grep Detached | grep data | cut -d'       ' -f2
    

คุณจะต้องกดctrl+vแล้วแท็บแทรกหลังจากพารามิเตอร์ตัวคั่นtab -dผลลัพธ์ควรเป็นเช่นนี้

81592.data13
81586.data12
81574.data10
81580.data11
  1. ตอนนี้แพ็คลงในคำสั่งโดยใช้...เครื่องหมายคำพูดและวนรอบผลลัพธ์เช่นนี้ ตรวจสอบคำสั่งที่กำหนดสูตรเสมอก่อนที่จะรัน ฉันใช้echo screen -r

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        echo screen -r $s; \
    done
    
  2. echoหากทุกอย่างไปที่ดีนั้นลองได้โดยไม่ต้อง

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        screen -r $s; \
    done
    
  3. voila แต่ละหน้าจอที่คุณแยกออกจะนำคุณไปสู่หน้าจอถัดไป

คัดกรองความสุข !!


นี่เป็นคำตอบที่ดีจริงๆและทำให้คุณภาพโดยรวมของเว็บไซต์นี้ดีขึ้น
123456789123456789123456789

1

ฉันเขียนสคริปต์ของโหนดเพื่อให้ผู้ใช้สามารถเลือกเซสชันหน้าจอเพื่อแนบจากรายการโดยใช้ปุ่มลูกศร ฉันทำมันเป็นแพคเกจ npm คุณสามารถตรวจสอบได้ที่นี่: หน้าจอคำสั่ง หรือเพียงnpm i -g screen-commandลองใช้งานสมมติว่าคุณได้ติดตั้ง node.js แล้ว หลังจากติดตั้งแพคเกจใช้คำสั่งscเพื่อเรียกรายการหน้าจอ

ฉันหวังว่านี่จะทำให้การสลับไปยังหน้าจอตรงตามที่คุณต้องการง่ายขึ้น

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