.png)
Eu gostaria de ter poucas sessões virtuais em uma janela do PuTTY e alternar entre elas rapidamente. Qual é a melhor maneira de fazer isso? screen
? Eu sei que posso desconectar ctrl+ad
e reconectar em uma sessão diferente, mas parece muita digitação.
Responder1
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 (conforme indicado por Ansgar) com ctrl+ a, npara a próxima janela, e ctrl+ a, ppara a janela anterior.
ctrl+ a, "fornecerá uma lista de todas as janelas abertas.
O uso desses atalhos fáceis permitirá que você alterne entre diferentes terminais com muita rapidez e facilidade, atingindo seu objetivo sem usar várias sessões de tela.
Se você adicionar a seguinte linha a ~/.screenrc ela sempre exibirá suas janelas abertas e qual delas está selecionada, então você não precisa acompanhar em 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 hardstatus que eu gosto de usar, mas é completamente personalizável (veja a página de manual ou pesquise no Google por "gnu screen hardstatus").
Há muitas outras coisas que você pode fazer com ele (nomear as diferentes janelas abertas, por exemplo), então vale a pena ler alguns tutoriais.
Aqui estão alguns 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
Responder2
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ê mude para uma tela específica.
Responder3
Depois de tanto tempo fiz um Script para contornar esse recurso completamente ausente. Primeiro de tudo, precisa de um fifo:
mkdir ~/.screen
mkfifo ~/.screen/pipe
Este pipe nomeado é útil para a comunicação entre a sessão desanexada e a sessão "Principal sem tela".
Arquivosc(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 "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 outra sessionrc que você gosta de inventar, eu uso o Session Work para diversas coisas
Ex: ~/.screen/Workrc
layout new Work
screen -t "bash" bash --login
Agora estamos no Session Monitor, quando digitamos:
sc Work
o monitor de sessão se desconecta e grava "Trabalho" no tubo nomeado. Conseqüentemente, o primeiro script sc avança e anexa a sessão "Trabalho".
O sc invocado a partir do fechamento do Monitor de sessão.
Quando desconectamos todas as sessões estamos em um loop infinito então temos que fazer Ctrl-c para sair.
Responder4
Você pode fazer isso com um script de shell simples 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 classificou 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ê deverá ter suas telas assimThere 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 destacadas usando
grep
.screen -ls | grep Detached
Você deveria conseguir algo assim
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 e 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 ctrl+v
tab para inserir um tab
após o parâmetro delimitador -d
. Os resultados deveriam ser assim.
81592.data13
81586.data12
81574.data10
81580.data11
Agora coloque isso em um comando usando
...
aspas e faça um loop sobre os resultados como este. Sempre verifique primeiro os comandos formulados antes de executá-los. 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
Voilá. Cada tela da qual você se separa leva você para a próxima.
Boa exibição!!