Acabei de aprender sobre o comando screen no linux - é genial. Eu amo isso. No entanto, o terminal / prompt na tela parece e se comporta de maneira diferente do meu prompt do bash padrão. Ou seja, as cores não são as mesmas, a conclusão da guia não parece funcionar etc.
Existe uma maneira de dizer para a tela se comportar como um prompt do bash normal (pelo menos, normal como no que estou acostumado)?
informação adicional
Estou conectando via ssh de um Mac (Terminal) a uma caixa Linux sem cabeça (Ubuntu). Após o login, eu tenho TERM=xterm-color
e quando executo a tela, eu o tenho TERM=screen
.
Vou tentar as sugestões abaixo para ver se posso alterar o $TERM
valor primeiro.
bash
gnu-screen
xterm
thornomad
fonte
fonte
Respostas:
Graças a este post , o que fiz foi adicionar uma linha a
~/.screenrc
:Então as coisas no seu
~/.bashrc
,/etc/bashrc
, etc, devem se executar.fonte
tela altera o tipo de termo para
screen
. Você pode fazer uma das duas coisas:.screenrc
.bashrc
arquivos procurarTERM=screen
, bem comoTERM=xterm
fonte
$HOME/.screenrc
arquivo e adicionei esta linha ao topo:term xterm-color
e wa la! O prompt de cores e os$TERM
valores correspondem. No entanto, não há preenchimento de tabulação ...$TERM
; algumas coisas serão ativadas com o xterm e com o xterm-color, outras apenas o xterm. Outras coisas têm outras opções.Eu gosto do jeito que você escreveu sua pergunta, eu estava me perguntando a mesma coisa e demorou um pouco para descobrir. Eu tive a sorte de já saber um pouco sobre invocação de shell, então achei que o problema estava lá em algum lugar.
Aqui estão minhas descobertas. Em primeiro lugar, eu pessoalmente acho interessante e vale a pena conhecer a diferença entre um shell de login e um não-login. Faça um
man $SHELL
e procure a seção INVOCATION para ler mais sobre isso.Você pode perguntar à sua instância atual do shell se é um shell de login ou não-logon, emitindo um
shopt login_shell
em seu prompt. Observe que normalmente é uma opção somente leitura.Nos meus sistemas Debian,
screen
sempre vem com shells sem login.Depois de pesquisar na web e ler
man $SHELL
, testei algumas coisas e as duas abordagens a seguir funcionaram para mim. Em~/.screenrc
Adicionar / atualizar uma linha da seguinte forma:Se isso não der certo E você estiver usando
bash
, você pode tentar alternativamente, conforme compartilhado pelo Seamus :Como mencionado, você pode testar se sua instância atual do shell é um shell de logon emitindo
shopt login_shell
em seu prompt.fonte
cd ~/Projects ; screen ; pwd #=> ~/Projects
. No entanto, o que eu recebo depois de adicionarshell -$SHELL
aos meus~/.screenrc
sejacd ~/Projects ; screen ; pwd #=> ~/
Dependendo de como você está acostumado a executar o Bash, você pode estar executando um shell de login. Ao executar
screen
, você está executando um shell interativo sem login.A diferença está em quais scripts de inicialização são executados.
/etc/bash.bashrc
em seguida,~/.bashrc
são originados quando um não-login shell interativo é iniciado/etc/profile
depois, o primeiro encontrado de~/.bash_profile
,~/.bash_login
e~/.profile
é originado quando um shell de logon interativo é iniciadoIsso pode estar afetando você.
Eu também verificaria se
$TERM
é diferente.fonte
A tela não substitui o bash, executa-o ou qualquer outro shell. talvez ele está correndo
csh
,zsh
oubash
, mas com diferentes paramters.a primeira coisa que eu tentaria é verificar
ps
e/proc/<pid>/cmdline
ter certeza de que ele está usando o mesmo shell com os mesmos parâmetros quelogin
ele.depois disso, verifique
/etc/screenrc
e qualquer outro arquivo mencionado naman screen
seção FILES.fonte
ps
comando e ele mostra quebash
está sendo executado (este é um comando ps dentro da tela) ... Eu consegui a cor funcionando (acima), só preciso completar a guia.Eu tive o mesmo problema, quando corri a tela, perdi o prompt de cores legais do PS1 que encontrei com astúcia: P.
Problema é que eu estava executando assim em ~ / .bash_profile
Isso significa que, quando a tela estava executando o bash_profile, o PS1 não está sendo carregado.
A correção é fácil: adicione exportação à instrução PS1 em ~. / Bash_profile para ter a seguinte aparência:
Assim, a variável não é perdida na execução aninhada.
fonte
Só quero adicionar algo sobre "defshell -bash" (que eu acabei de descobrir, depois de meses coçando a cabeça). Quando você faz isso, o shell filho executado pela tela tem $ SHELL definido como "bash", em vez de "/ bin / bash", como normalmente seria. Se você executar o "script" dentro da sessão da tela, você obtém:
Ou pelo menos é o que acontece na minha caixa do Ubuntu 14.04. A solução alternativa que eu estou usando é executar
$ SHELL=/bin/bash script
. Eu imaginaria que $ SHELL configurado errado quebraria outras coisas, mas o script é o que eu notei.fonte
Estou usando esse trecho
.profile
antes de qualquer inicialização do shell:which screen > /dev/null 2>&1 && { screen -q -ls if [ $? -gt 10 ]; then read -p "$(tput setaf 2)Found a running SCREEN sesion, attach?$(tput sgr0)[Y/n] " y >&2 if [ "${y:-y}" = "y" -o "$y" = "Y" ]; then screen -aDR && logout fi else echo "$(tput setaf 3)No running SCREEN sessions found.$(tput sgr0)" >&2 fi }
Então, se não houver uma sessão de tela em execução, eu ... bem, não caio no prompt de shell padrão. Há mais uma solicitação de
sudo
senha (desde 99% do tempo em que faço login para administrar o servidor) e, se pretendo executar uma tarefa longa, cancelo o login do sudo, inicio a tela manualmente na sessão do usuário e o sudo lá.O ponto principal aqui é "antes de qualquer inicialização do shell", para que, quando você já tenha uma sessão de tela em execução, ela já seja inicializada com código de idioma e outras coisas e não precise refazê-la novamente.
fonte