Respostas:
Apenas para expandir o que Ansgar disse, caso você não esteja muito familiarizado com a tela gnu, ter várias "janelas" em uma única sessão de tela provavelmente realizará o que você precisa.
ctrl+ a, ccriará uma nova "janela" na sua sessão de tela ativa. Você pode alternar entre várias janelas (como Ansgar indicou) com ctrl+ a, npara a próxima janela e ctrl+ a, ppara a janela anterior.
ctrl+ a, "fornecerá uma lista de todas as suas janelas abertas.
O uso desses atalhos fáceis permitirá que você alterne entre diferentes terminais de maneira muito rápida e fácil, atingindo seu objetivo sem usar várias sessões de tela.
Se você adicionar a seguinte linha ao ~ / .screenrc, ela sempre exibirá as janelas abertas e qual está selecionada, para que você não precise manter o controle de qual janela está lembrando.
hardstatus alwayslastline '%{= kg}[ %{G}%H %{g}][%= %{= kB}%?%-Lw%?%{+b r}(%{G}%n*%f %t%?(%u)%?%{r})%{-b B}%?%+Lw%?%?%= %{g}%]'
Esta é a linha de hardstatus que eu gosto de usar, mas é completamente personalizável (consulte a página de manual ou pesquise no google por "hardnatus da tela gnu").
Há várias outras coisas que você pode fazer com isso (nomear as diferentes janelas abertas, por exemplo), por isso vale a pena ler alguns tutoriais.
Aqui estão algumas que encontrei com uma pesquisa rápida:
http://news.softpedia.com/news/GNU-Screen-Tutorial-44274.shtml
http://www.ibm.com/developerworks/aix/library/au-gnu_screen/
E, claro, o mais útil de todos:
# From your terminal:
$ man screen
Espero que ajude.
Mateus
Sim, screen
é provavelmente o caminho a percorrer. Ctrl+ a, nlevará você para a próxima janela, Ctrl+ a, ppara a anterior. Ctrl+ a, 0.. 9permitirá que você alterne para uma tela específica.
O que os outros dizem está correto. Eu só quero mencionar que tmux
é uma alternativa para screen
. Eles têm comandos muito semelhantes.
Ambos screen
e tmux
oferecem várias janelas para uma sessão de corrida, e isso é provavelmente o que você quer.
tmux
Além disso, oferece salto entre várias sessões (cada uma com suas próprias janelas). Você precisaria disso muito raramente.
Aqui estão alguns links para a documentação da tela e um curso intensivo sobre o tmux .
Depois de tanto tempo, criei um script para solucionar esse recurso completamente ausente. Antes de tudo, precisa de um fifo:
mkdir ~/.screen
mkfifo ~/.screen/pipe
Esse canal nomeado é útil para a comunicação entre a sessão destacada e a sessão "Principal sem tela".
Arquivo sc (em $ 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
Um exemplo de um "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
O resultado é: quando você deseja iniciar o tipo de tela:
sc Monitor
ou outro sessionrc que você gostaria de inventar, eu uso o Session Work para várias coisas
Por exemplo: ~ / .screen / Workrc
layout new Work
screen -t "bash" bash --login
Agora estamos no Session Monitor, quando digitamos:
sc Work
o monitor da sessão se desconecta e grava "Trabalho" no tubo nomeado. Consequentemente, o primeiro script sc avança e anexa a sessão "Trabalho".
O sc invocado da sessão Monitor close.
Quando desanexamos todas as sessões, estamos em um loop infinito; portanto, precisamos pressionar Ctrl-c para sair.
Você pode fazer isso com um simples shell script como
for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done
Vamos supor que você tenha poucas telas abertas. Vamos supor também que você os categorize como trabalho e dados.
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;
...
Aplicando screen -ls
, você deve ter telas como esta
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.
Agora vamos isolar as telas desanexadas usando grep
.
screen -ls | grep Detached
Você deve obter algo parecido com isto
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)
Agora vamos selecionar os que você deseja (por exemplo, dados), novamente usando grep
.
screen -ls | grep Detached | grep data
Isso isolará apenas as telas de dados. Você pode alterar a palavra-chave grep com expressões regulares para pesquisar para personalizar sua pesquisa.
81592.data13 (Detached)
81586.data12 (Detached)
81574.data10 (Detached)
81580.data11 (Detached)
Felizmente, o resultado é bem estruturado e delimitado por tabulações. Agora vamos dividir as colunas em campos e escolher o segundo campo usando cut
.
screen -ls | grep Detached | grep data | cut -d' ' -f2
Você precisará pressionar a tecla ctrl+v
tab para inserir a tab
após o parâmetro delimitador -d
. Os resultados devem ser assim.
81592.data13
81586.data12
81574.data10
81580.data11
Agora coloque isso em um comando usando as ...
aspas e faça um loop sobre os resultados como este. Sempre verifique os comandos formulados primeiro antes de executá-lo. eu useiecho screen -r
for s in `screen -ls | \
grep Detached | grep data | \
cut -d' ' -f2`; do \
echo screen -r $s; \
done
Se tudo correr bem, tente sem echo
.
for s in `screen -ls | \
grep Detached | grep data | \
cut -d' ' -f2`; do \
screen -r $s; \
done
Voila. Cada tela da qual você se destaca leva você para a próxima.
Triagem feliz !!
Eu escrevi um script de nó para permitir ao usuário selecionar a sessão da tela para anexar a partir de uma lista, usando as teclas de seta. Eu fiz um pacote npm. Você pode conferir aqui: screen-command . Ou apenas npm i -g screen-command
para experimentá-lo, supondo que você já tenha o node.js instalado. Após instalar o pacote, use o comando sc
para convocar a lista de telas.
Espero que isso facilite a mudança para a tela exata desejada.
^a
para outra coisa, para que não seja ridiculamente irritante usar a edição de linhas no estilo emacs no bash, qualquer outra coisa. Eu uso^t
.