ฉันต้องการที่จะมีเซสชั่นเสมือนน้อยในหนึ่งหน้าต่างฉาบและเปลี่ยนระหว่างพวกเขาอย่างรวดเร็ว วิธีที่ดีที่สุดในการทำเช่นนั้นคืออะไร? screen
? ฉันรู้ว่าฉันสามารถแยกออกได้ctrl+ad
จากนั้นจึงกลับไปที่เซสชันอื่น แต่ดูเหมือนว่าจะมีการพิมพ์จำนวนมาก
ฉันต้องการที่จะมีเซสชั่นเสมือนน้อยในหนึ่งหน้าต่างฉาบและเปลี่ยนระหว่างพวกเขาอย่างรวดเร็ว วิธีที่ดีที่สุดในการทำเช่นนั้นคืออะไร? screen
? ฉันรู้ว่าฉันสามารถแยกออกได้ctrl+ad
จากนั้นจึงกลับไปที่เซสชันอื่น แต่ดูเหมือนว่าจะมีการพิมพ์จำนวนมาก
คำตอบ:
เพียงเพื่อขยายสิ่งที่ 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
หวังว่าจะช่วย
แมทธิว
ใช่screen
เป็นไปได้มากที่สุด Ctrl+ a, nจะนำคุณไปยังหน้าต่างถัดไปCtrl+ a, pไปก่อนหน้านี้หนึ่ง Ctrl+ a, 0.. 9จะอนุญาตให้คุณสลับไปที่หน้าจอเฉพาะ
สิ่งที่คนอื่นพูดถูกต้อง ผมแค่อยากจะพูดถึงเป็นทางเลือกให้tmux
screen
พวกเขามีคำสั่งที่คล้ายกันมาก
ทั้งสองscreen
และtmux
เสนอ windows หลายบานสำหรับเซสชันที่กำลังทำงานอยู่และนี่อาจเป็นสิ่งที่คุณต้องการ
tmux
นอกจากนี้ยังมีการกระโดดระหว่างหลายเซสชัน (แต่ละห้องมีหน้าต่างของตัวเอง) คุณต้องการสิ่งนั้นน้อยมาก
นี่คือการเชื่อมโยงบางเอกสารที่มี หน้าจอและหลักสูตรความผิดพลาดเกี่ยวกับtmux
หลังจากเวลาผ่านไปนานมากฉันได้ทำสคริปต์เพื่อแก้ไขคุณสมบัติที่ขาดหายไปนี้อย่างสมบูรณ์ ก่อนอื่นต้องมีฟีเจอร์:
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 เพื่อออก
คุณสามารถทำได้ด้วยเชลล์สคริปต์แบบง่ายๆ
for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done
สมมติว่าคุณเปิดหน้าจอน้อย ให้ถือว่าคุณจัดหมวดหมู่เป็นงานและข้อมูล
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;
...
ใช้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.
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)
ตอนนี้ให้เลือกคนที่คุณต้องการ (เช่นข้อมูล) grep
อีกครั้งโดยใช้
screen -ls | grep Detached | grep data
สิ่งนี้จะแยกเฉพาะหน้าจอข้อมูล คุณสามารถเปลี่ยนคำหลัก grep ด้วยนิพจน์ทั่วไปเพื่อค้นหาเพื่อปรับแต่งการค้นหาของคุณ
81592.data13 (Detached)
81586.data12 (Detached)
81574.data10 (Detached)
81580.data11 (Detached)
โชคดีที่ผลลัพธ์มีโครงสร้างที่ดีและคั่นด้วยแท็บ ตอนนี้ให้แยกคอลัมน์ลงในเขตและเลือกสนามที่ 2 cut
โดยใช้
screen -ls | grep Detached | grep data | cut -d' ' -f2
คุณจะต้องกดctrl+v
แล้วแท็บแทรกหลังจากพารามิเตอร์ตัวคั่นtab
-d
ผลลัพธ์ควรเป็นเช่นนี้
81592.data13
81586.data12
81574.data10
81580.data11
ตอนนี้แพ็คลงในคำสั่งโดยใช้...
เครื่องหมายคำพูดและวนรอบผลลัพธ์เช่นนี้ ตรวจสอบคำสั่งที่กำหนดสูตรเสมอก่อนที่จะรัน ฉันใช้echo screen -r
for s in `screen -ls | \
grep Detached | grep data | \
cut -d' ' -f2`; do \
echo screen -r $s; \
done
echo
หากทุกอย่างไปที่ดีนั้นลองได้โดยไม่ต้อง
for s in `screen -ls | \
grep Detached | grep data | \
cut -d' ' -f2`; do \
screen -r $s; \
done
voila แต่ละหน้าจอที่คุณแยกออกจะนำคุณไปสู่หน้าจอถัดไป
คัดกรองความสุข !!
ฉันเขียนสคริปต์ของโหนดเพื่อให้ผู้ใช้สามารถเลือกเซสชันหน้าจอเพื่อแนบจากรายการโดยใช้ปุ่มลูกศร ฉันทำมันเป็นแพคเกจ npm คุณสามารถตรวจสอบได้ที่นี่: หน้าจอคำสั่ง หรือเพียงnpm i -g screen-command
ลองใช้งานสมมติว่าคุณได้ติดตั้ง node.js แล้ว หลังจากติดตั้งแพคเกจใช้คำสั่งsc
เพื่อเรียกรายการหน้าจอ
ฉันหวังว่านี่จะทำให้การสลับไปยังหน้าจอตรงตามที่คุณต้องการง่ายขึ้น
^a
เป็นอย่างอื่นดังนั้นจึงไม่น่ารำคาญอย่างยิ่งที่จะใช้ไลน์สไตล์ emacs ในการทุบตีสิ่งอื่น^t
ฉันใช้