วิธีเปิดหน้าต่างแท็บในหน้าจอ Gnu & ดำเนินการคำสั่งภายในแต่ละหน้าต่าง


30

เมื่อเริ่มเซสชันชื่อชื่อใด ๆ เช่นนี้ screen -S name1

ฉันต้องการเปิดหน้าต่างแท็บในเซสชันหน้าจอนี้เช่นเมื่อเปิดแท็บใน gnome-terminal เช่นนี้

gnome-terminal --tab -e "some commands"

ดังนั้นจะทำอย่างไร


ทั้งสองต้องการทราบวิธีเปิดแท็บsımılarไปที่คำพังเพยคำศัพท์และฉันต้องการเรียกใช้คำสั่งบางคำสั่งหลังจากเปิดแท็บเปิดเรียกใช้
Ahmed Zain El Dein

ดังนั้นเทคนิคที่ฉันอธิบายด้านล่างจะแสดงแท็บที่คุณกำลังมองหาแล้ว ต้องการวิธีเรียกใช้คำสั่งในนั้นหรือไม่?
slm

แต่ที่จริงฉันขอร้องและฉันก็ไม่เข้าใจว่าคุณต้องการให้ฉันทำอะไรฉันคิดว่ามันมีไวยากรณ์ที่จะเปิดแท็บในหน้าจอ แต่มันดูเหมือนว่าıจะเพิ่มlınesบางอย่างให้กับfıle
Ahmed Zain El Dein

ตกลงฉันเข้าใจว่าคุณต้องการให้ฉันคัดลอกสิ่งนี้และที่ผ่านมาในไฟล์นี้ในบ้านของฉัน แต่สิ่งที่ฉันถามคือหน้าจอชื่อ t ให้ชื่อไปที่หน้าจอเท่าที่ฉันรู้และฉันต้องการเปิดแท็บเหล่านั้นในเซสชันที่ตั้งชื่อ เช่นscreen -S name1 --tab -e "some commands"ฉันหวังว่าคุณจะได้รับสิ่งที่ฉันถามเกี่ยวกับ?
Ahmed Zain El Dein

mmmm เหล่านี้เป็นแท็บที่กำหนดไว้ล่วงหน้าซึ่งมีจำนวนที่แน่นอนนี่ไม่ใช่สิ่งที่ฉันขอให้คุณ :) ฉันไม่รู้ว่ามีหลายแท็บที่ฉันต้องการในเวลาทำงานสิ่งที่ฉันต้องการคือสิ่งที่คล้ายกับคำสั่งเทอร์มินัล Gnome gnome-terminal --tab -e "commands " --tab -e " commands นี้จะเปิดหน้าต่างเดียวของ เช่นสถานีที่มีสองแท็บฉันหมายถึง :) ขอบคุณ u
Ahmed Zain El Dein

คำตอบ:


73

1. แท็บในหน้าจอ

คุณกำลังมองหาสิ่งนี้เพื่อเพิ่มลงในไฟล์. screenrc ของคุณ:

screen -t tab1
screen -t tab2

นี่เป็น .screenrc พื้นฐานที่ดีที่จะได้รับคุณเริ่มต้นด้วยแถบสถานะ ฯลฯหมายเหตุ:/home/<username>/.screenrcนี้มักจะอยู่ในไดเรกทอรีที่บ้านของคุณ

screen -t validate #rtorrent
screen -t compile #irssi
screen -t bash3
screen -t bash4
screen -t bash5
altscreen on
term screen-256color
bind ',' prev
bind '.' next
#
#change the hardstatus settings to give an window list at the bottom of the
#screen, with the time and date and with the current window highlighted
hardstatus alwayslastline
#hardstatus string '%{= kG}%-Lw%{= kW}%50> %n%f* %t%{= kG}%+Lw%< %{= kG}%-=%c:%s%{-}'
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'

ภาพหน้าจอ

ss ของเซสชันหน้าจอ

2. แท็บในหน้าจอ (มีคำสั่งทำงานภายใน)

ตัวอย่าง.screenrcด้านล่างจะสร้าง 2 แท็บและเรียกใช้ 3 คำสั่ง echo ในแต่ละคำสั่ง

screen -t tab1                                                                                     
select 0                                                                                           
stuff "echo 'tab1 cmd1'; echo 'tab1 cmd2'; echo 'tab1 cmd3'^M"                                     
screen -t tab2                                                                                     
select 1                                                                                           
stuff "echo 'tab2 cmd1'; echo 'tab2 cmd2'; echo 'tab2 cmd3'^M"                                     

altscreen on                                                                                       
term screen-256color                                                                               
bind ',' prev                                                                                      
bind '.' next                                                                                      
#                                                                                                  
#change the hardstatus settings to give an window list at the bottom of the                        
#screen, with the time and date and with the current window highlighted                            
hardstatus alwayslastline                                                                          
#hardstatus string '%{= kG}%-Lw%{= kW}%50> %n%f* %t%{= kG}%+Lw%< %{= kG}%-=%c:%s%{-}'              
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'

เทคนิคนี้ใช้ประโยชน์จากหน้าจอselectและstuffคำสั่งเพื่อเลือกแท็บใดแท็บหนึ่งจากนั้น "สตริง" ลงในแท็บนั้น

ภาพหน้าจอ

เอสเอสของหน้าจอ w / แท็บ & คำสั่ง

3. การสร้าง # 2 โดยไม่ต้องใช้.screenrcไฟล์

หากคุณกำลังมองหาสถานการณ์ที่คุณสามารถ:

  1. สร้างเซสชันหน้าจอ
  2. โหลดมันด้วยแท็บ
  3. ให้แต่ละแท็บใช้คำสั่งของตนเอง
  4. ไม่ต้องการ.screenrcไฟล์

นี่คือสิ่งที่คุณต้องการ! เตรียมว่า สิ่งนี้สามารถทำให้ยุ่งยากเล็กน้อยด้วยบรรทัดคำสั่ง

สำหรับผู้เริ่มต้นสร้างเซสชันหน้าจอ:

$ screen -AdmS myshell -t tab0 bash

สวิทช์-AdmSทำดังต่อไปนี้:

(ดูหน้าคนหน้าจอสำหรับรายละเอียดเพิ่มเติม)

-A

    Adapt the sizes of all windows to the size of the  current terminal. 
    By default, screen tries to restore its old window sizes when
    attaching to resizable terminals

-d -m

    Start screen in "detached" mode. This creates a new session but
    doesn't attach to it. This is useful for system startup scripts.

-S sessionname

    When creating a new session, this option can be used to specify a
    meaningful name for the session. This name identifies the session for
    "screen -list" and "screen -r" actions. It substitutes the default
    [tty.host] suffix.

ตอนนี้เรามาเริ่มโหลดมันด้วย tabs + command ของพวกมัน:

$ screen -S myshell -X screen -t tab1 vim
$ screen -S myshell -X screen -t tab2 ping www.google.com
$ screen -S myshell -X screen -t tab3 bash

3 คำสั่งเหล่านี้จะสร้างแท็บเพิ่มเติม 3 แท็บและเรียกใช้เป็นกลุ่ม, ping google, และเรียกใช้งานเชลล์ bash หากเราแสดงรายการเซสชันหน้าจอเราจะเห็นสิ่งต่อไปนี้:

$ screen -ls
There is a screen on:
        26642.myshell   (Detached)
1 Socket in /var/run/screen/S-root.

หากเราเชื่อมต่อกับเซสชันหน้าจอmyshellและรายการแท็บที่มีอยู่เราจะเห็นสิ่งต่อไปนี้:

$ screen -r myshell

กดปุ่มชุดนี้: Ctrl+ Aตามด้วยShift+"

Num Name                                                                   Flags

  0 tab0                                                                       $
  1 tab1                                                                       $
  2 tab2                                                                       $
  3 tab3                                                                       $

เปลี่ยนเป็นtab2 :

64 bytes from ord08s08-in-f20.1e100.net (74.125.225.116): icmp_seq=443 ttl=55 time=41.4 ms
64 bytes from ord08s08-in-f20.1e100.net (74.125.225.116): icmp_seq=444 ttl=55 time=33.0 ms
64 bytes from ord08s08-in-f20.1e100.net (74.125.225.116): icmp_seq=445 ttl=55 time=30.1 ms

ภาพหน้าจอ

ss ของหน้าจอเริ่มต้นจาก cli

คำสั่งข้างต้นเป็นวิธีพื้นฐานในการบรรลุสิ่งที่ OP ต้องการ หลักสูตรนี้สามารถย่อและกลั่นโดยใช้นามแฝง Bash หรือแม้แต่สคริปต์เชลล์นี่เป็นเพียงการสาธิตความสามารถและแสดงวิธีการ!

อ้างอิง


2
ถ้าฉันไม่พลาดอ่าน Q เขาต้องการรันคำสั่งเมื่อเริ่มเซสชัน โดยทั่วไปแล้วscreen "cd /foo/bar/; summon_cthulhu;" <<-- in that screen session
Runium

คุณคิดว่าเขาหมายถึงเปิดหน้าจอที่มีแท็บและเรียกใช้คำสั่งภายในหนึ่งในนั้นหรือไม่
slm

ใช่. เรียกใช้คำสั่งเปลือกบางที่เริ่มต้นภายในLast login on ... Welcome to XXX, N new mails....หน้าจอมักจะเป็นเมื่อคุณเข้าสู่ระบบหลังจากบูตและได้รับ อย่างน้อยนั่นก็เป็นวิธีที่ฉันอ่านหัวเรื่องของคำถาม
Runium

อ่านความคิดเห็นของเขาในคำถามที่เขาต้องการทั้งคู่
slm

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