Beralih cepat di antara sesi virtual (layar?)

19

Saya ingin memiliki beberapa sesi virtual dalam satu jendela dempul dan mengubah di antara mereka dengan cepat. Apa cara terbaik untuk melakukan itu? screen? Saya tahu saya bisa melepaskan diri ctrl+addan kemudian menempel kembali ke sesi yang berbeda, tetapi sepertinya banyak mengetik.

zzz
sumber

Jawaban:

22

Hanya untuk memperluas apa yang dikatakan Ansgar jika Anda tidak terlalu terbiasa dengan layar gnu, Memiliki beberapa "jendela" dalam satu sesi layar mungkin akan memenuhi apa yang Anda butuhkan.

ctrl+ a, cakan membuat "jendela" baru di sesi layar aktif Anda. Anda dapat beralih di antara beberapa jendela (seperti ditunjukkan Ansgar) dengan ctrl+ a, nuntuk jendela berikutnya, dan ctrl+ a, puntuk jendela sebelumnya.

ctrl+ a, "akan memberi Anda daftar semua jendela terbuka Anda.

Menggunakan pintasan mudah ini akan memungkinkan Anda beralih di antara terminal yang berbeda dengan sangat cepat dan mudah, mencapai tujuan Anda tanpa menggunakan beberapa sesi layar.

Jika Anda menambahkan baris berikut ke ~ / .screenrc itu akan selalu menampilkan jendela terbuka Anda dan mana yang dipilih, jadi Anda tidak perlu melacak jendela yang sedang Anda buka dengan mengingat.

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

Ini adalah baris hardstatus yang saya suka gunakan, tetapi sepenuhnya dapat dikustomisasi (lihat halaman manual atau cari google untuk "gnu screen hardstatus").

Ada banyak hal lain yang dapat Anda lakukan dengannya (menamai jendela terbuka yang berbeda misalnya), jadi ada baiknya membaca beberapa tutorial.

Berikut adalah beberapa yang saya temukan dengan pencarian cepat:

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

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

Dan tentu saja yang paling berguna dari semuanya:

# From your terminal:
$ man screen

Semoga itu bisa membantu.

Matius

Matius
sumber
2

Ya, screenkemungkinan besar cara untuk pergi. Ctrl+ a, nakan membawa Anda ke jendela berikutnya, Ctrl+ a, pke yang sebelumnya. Ctrl+ a, 0.. 9akan memungkinkan Anda untuk beralih ke layar tertentu.

Ansgar Wiechers
sumber
Anda dapat mengatur keybindings lebih cepat, seperti F11 untuk prev, F12 untuk jendela berikutnya. Dan ganti karakter pelarian layar dari yang ^alain, jadi tidak menyebalkan untuk menggunakan pengeditan garis gaya emacs di bash, apa pun. Saya menggunakan ^t.
Peter Cordes
1

Apa yang dikatakan orang lain itu benar. Saya hanya ingin menyebutkan tmuxalternatif screen. Mereka memiliki perintah yang sangat mirip.

Keduanya screendan tmuxmenawarkan beberapa jendela untuk sesi berjalan, dan ini mungkin yang Anda inginkan. tmuxjuga menawarkan lompatan di antara beberapa sesi (masing-masing memiliki windows sendiri). Anda sangat membutuhkannya.

Berikut adalah beberapa tautan ke dokumentasi layar dan kursus kilat tentang tmux .

tkruse
sumber
1

Setelah sekian lama saya membuat Script untuk mengatasi fitur yang benar-benar hilang ini. Pertama-tama perlu fifo:

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

Pipa bernama ini berguna untuk komunikasi antara sesi yang dilepas dan sesi "Main-tanpa-layar".

File sc (dalam $ 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

Contoh "CONFIGFILE" adalah: ~ / .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

Hasilnya adalah: ketika Anda ingin meluncurkan jenis layar:

sc Monitor

atau sesi lain yang ingin Anda ciptakan, saya menggunakan Karya Sesi untuk berbagai hal

Contoh: ~ / .screen / Workrc

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

Sekarang kita berada di Monitor Sesi, ketika kita mengetik:

sc Work

Monitor sesi melepaskan dirinya sendiri dan menulis "Bekerja" ke pipa bernama. Akibatnya skrip sc pertama berjalan maju dan melampirkan sesi "Work".
Sc dipanggil dari Monitor sesi dekat.

Ketika kita melepaskan semua Sesi kita berada dalam loop tak terbatas sehingga kita harus melakukan Ctrl-c untuk keluar.

Thomas8
sumber
1

Anda dapat melakukannya dengan skrip shell sederhana seperti

    for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done 
  1. Mari kita asumsikan Anda memiliki beberapa layar terbuka. Mari kita asumsikan Anda memilikinya dikategorikan sebagai pekerjaan dan data.

    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. Menerapkan screen -ls, Anda harus memiliki layar Anda seperti ini

    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. Sekarang mari kita mengisolasi menggunakan layar terpisah grep.

    screen -ls | grep Detached
    

Anda harus mendapatkan sesuatu seperti ini

        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. Sekarang mari kita pilih yang Anda inginkan (misalnya data), lagi menggunakan grep.

    screen -ls | grep Detached | grep data
    

Ini hanya akan mengisolasi layar data. Anda dapat mengubah kata kunci grep dengan ekspresi reguler untuk mencari untuk menyesuaikan pencarian Anda.

        81592.data13    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81580.data11    (Detached)
  1. Untungnya hasilnya terstruktur dengan baik dan dibatasi tab. Sekarang mari kita pisahkan kolom menjadi bidang dan pilih bidang ke-2 menggunakan cut.

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

Anda perlu menekan ctrl+vlalu tab untuk menyisipkan tabparameter pembatas setelah -d. Hasilnya harus seperti ini.

81592.data13
81586.data12
81574.data10
81580.data11
  1. Sekarang kemas ini ke dalam perintah menggunakan ...tanda kutip dan mengulangi hasil seperti ini. Selalu periksa perintah yang dirumuskan terlebih dahulu sebelum benar-benar menjalankannya. Saya menggunakanecho screen -r

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        echo screen -r $s; \
    done
    
  2. Jika semuanya berjalan baik, maka cobalah tanpa echo.

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        screen -r $s; \
    done
    
  3. Voila. Setiap layar yang Anda lepaskan akan membawa Anda ke yang berikutnya.

Selamat pemutaran !!

Mo Hossny
sumber
Ini adalah jawaban yang BENAR-BENAR bagus dan meningkatkan kualitas keseluruhan situs ini.
123456789123456789123456789
1

Saya menulis skrip simpul untuk memungkinkan pengguna memilih sesi layar untuk dilampirkan dari daftar, menggunakan tombol panah. Saya telah membuatnya menjadi paket npm. Anda dapat memeriksanya di sini: layar-perintah . Atau hanya npm i -g screen-commanduntuk mencobanya, dengan asumsi Anda sudah menginstal node.js. Setelah menginstal paket, gunakan perintah scuntuk memanggil daftar layar.

Saya harap ini membuat beralih ke layar tepat yang Anda inginkan lebih mudah.

hi94740
sumber