Iniciando a tela GNU ao abrir o terminal

0

Eu quero que cada terminal aberto seja iniciado com a sessão de tela. Na verdade, o que eu quero é simplesmente realizado com os seguintes passos:

1. win+enter (open terminal in i3wm)
2. $ screen

Eu queria fazer isso automaticamente e colocar

[[ $TERM != "screen" ]] && screen

dentro de .bashrc . Como um efeito colateral agora eu vejo muitos processos bash sendo gerados (por que ??)

alexhop+ 19307  0.0  0.0  28276  3016 pts/0    S+   11:20   0:00 screen
alexhop+ 19308  2.5  0.4  59272 33572 ?        Rs   11:20   0:00 SCREEN
alexhop+ 19309  0.2  0.0  24084  5516 pts/2    Ss+  11:20   0:00 /bin/bash
alexhop+ 19322  0.2  0.0  24084  5456 pts/3    Ss+  11:20   0:00 /bin/bash
alexhop+ 19338  0.2  0.0  24084  5316 pts/4    Ss+  11:20   0:00 /bin/bash
alexhop+ 19354  0.2  0.0  24084  5452 pts/5    Ss+  11:20   0:00 /bin/bash
alexhop+ 19370  0.2  0.0  24084  5388 pts/6    Ss+  11:20   0:00 /bin/bash
alexhop+ 19386  0.2  0.0  24084  5356 pts/7    Ss+  11:20   0:00 /bin/bash
alexhop+ 19402  0.2  0.0  24084  5452 pts/8    Ss+  11:20   0:00 /bin/bash
alexhop+ 19418  0.2  0.0  24084  5436 pts/9    Ss+  11:20   0:00 /bin/bash
alexhop+ 19434  0.2  0.0  24084  5456 pts/10   Ss+  11:20   0:00 /bin/bash
alexhop+ 19450  0.2  0.0  24084  5396 pts/11   Ss+  11:20   0:00 /bin/bash
alexhop+ 19466  0.2  0.0  24084  5388 pts/12   Ss+  11:20   0:00 /bin/bash
alexhop+ 19482  0.2  0.0  24084  5388 pts/13   Ss+  11:20   0:00 /bin/bash
alexhop+ 19498  0.2  0.0  24084  5388 pts/14   Ss+  11:20   0:00 /bin/bash
alexhop+ 19514  0.2  0.0  24084  5384 pts/15   Ss+  11:20   0:00 /bin/bash
alexhop+ 19530  0.2  0.0  24084  5512 pts/16   Ss+  11:20   0:00 /bin/bash
alexhop+ 19546  0.2  0.0  24084  5388 pts/17   Ss+  11:20   0:00 /bin/bash
alexhop+ 19562  0.0  0.0  24084  5384 pts/18   Ss+  11:20   0:00 /bin/bash
alexhop+ 19578  0.2  0.0  24084  5436 pts/19   Ss+  11:20   0:00 /bin/bash
alexhop+ 19594  0.2  0.0  24084  5388 pts/20   Ss+  11:20   0:00 /bin/bash
alexhop+ 19610  0.3  0.0  24084  5384 pts/21   Ss+  11:20   0:00 /bin/bash

Qualquer ajuda seria apreciada.

Sistema host: Ubuntu 16.04.2 LTS

    
por Alex Hoppus 20.02.2018 / 09:24

1 resposta

2

Isso quase certamente está acontecendo porque algo em seu ambiente ( .bashrc , /etc/profile , o que quer que seja) está configurando a variável TERM (por exemplo, algo como TERM=xterm ).

Isso faz com que o teste [[ $TERM != "screen" ]] seja avaliado como verdadeiro, então outra instância da tela é iniciada.

A tela

, em seguida, executa seu $ SHELL dentro de si, causando um loop infinito de bash começando screen e screen iniciando bash .

BTW, se $TERM não estiver definido corretamente antes de screen iniciar, então screen não saberá como trabalhar corretamente com o terminal em que está sendo executado. Então, não defini-lo não é uma boa opção.

Existem várias maneiras melhores de detectar se um shell está sendo executado dentro de screen . Veja Como eu sei que sou rodando dentro de uma “tela” linux ou não? e Como posso saber se estou em uma tela? para obter respostas de algumas das muitas outras vezes que essa pergunta foi feita em sites irmãos do Stack Exchange.

Provavelmente, a maneira mais fácil é testar se a variável $ STY está vazia. De acordo com man screen , esta variável é definida por screen para conter o "nome do soquete alternativo".

Em outras palavras, em vez de:

[[ $TERM != "screen" ]] && screen

tente isto:

[ -z "$STY" ] && screen    # test if $STY is empty

ou:

[ -n "$STY" ] || screen    # test if $STY is NOT empty.

Você pode usar [[ .... ]] , se preferir. Faz pouca diferença, exceto que você não teria que citar duas vezes o valor de $STY . IMO é um mau hábito de entrar e você deve citá-lo de qualquer maneira, porque as situações em que você FAZ tem que citar duas vezes suas variáveis superam em muito o número de casos especiais em que você não precisa. / p>     

por 20.02.2018 / 10:55