Como abrir uma aba da tela GNU para cada diretório em uma lista

2

Eu tenho o seguinte script - meio que funciona.

#!/bin/bash  

... define plugins, etc

for plugin in ${plugins[@]};
do 
  screen -t $plugin
done

Quero que isso seja feito

abra o gnu-screen e para cada plugin (que é um nome de diretório), inicie uma nova aba com o nome do plugin como o título da aba.

O que faz agora

abre o gnu-screen e abre o primeiro plugin em uma instância da tela (com o título correto), mas não continua executando os comandos. então quando eu saio da primeira tela, o segundo plugin é aberto em uma instância da tela, quando eu saio, o terceiro é aberto, etc.

O que eu sinto falta

Gostaria de dizer apenas screen -t $plugin && , como em, executar essa coisa e depois executar o seguinte. mas não tenho certeza de como fazer isso em um loop for

    
por dax 09.11.2014 / 22:27

3 respostas

2
#!/bin/bash

plugins=(Plugin1 Plugin2 Plugin3)

plugin_cmd="#!/bin/bash\necho This is plugin __placeholder__\n"
for plugin in ${plugins[@]};
do
    echo -e ${plugin_cmd/__placeholder__/$plugin} > /tmp/${plugin}.bash
    chmod +x /tmp/${plugin}.bash
    screen -dmS $plugin
    screen -S $plugin -X stuff "/tmp/${plugin}.bash\n"
    screen -d -r -S $plugin
done

Aceite o conselho de Thom Wigger e mude para o tmux.

    
por 19.11.2014 / 20:45
1

Por que não gerar um .screenrc personalizado?

Por exemplo Se a sua pasta com plugins não muda frequentemente, então escreva isso em um arquivo.

# Setting custom things:
startup_message off   

# starting a few shells with a preselected title
screen -t plugin1 0
screen -t plugin2 1
screen -t plugin3 2
screen -t my_email  -a -l exec elm  

Se o número de plugins for alterado com frequência, você poderá usar o script bash para gravá-los em um arquivo. Por exemplo,

rm ~/my_custom_screenrc
echo "# Setting custom things:" > ~/my_custom_screenrc
echo "startup_message off"      >> ~/my_custom_screenrc

Seguido pelo seu script bash onde você altera o

for plugin in ${plugins[@]};
do 
  screen -t $plugin
done

com um eco para anexar ( >> ) ao mesmo arquivo acima.

Finalmente, inicie a tela. Por exemplo. screen -c ~/my_custom_screenrc

Isso está longe de ser uma resposta perfeita e eu espero respostas adequadas dentro da semana. Mas eu não vi nenhuma maneira de postar isso como um comentário e ainda manter marcação suficiente para mantê-lo compreensível.

    
por 14.11.2014 / 13:31
0

Você deve tentar:

screen -t $plugin xterm &

em vez da sua versão. screen abre um novo shell, dentro do qual você ficará preso, sem possibilidade de continuar o loop do ; assim, o e comercial garante que o controle seja imediatamente retornado para o loop do , enquanto xterm (ou konsole, ou o que você quiser) dá um lugar, por assim dizer, onde a tela está fazendo o seu trabalho.

    
por 14.11.2014 / 20:44