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.
, 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>