Tela interrompe o início do comando longo quando acessado através do histórico do bash

9

Estou usando as versões padrão do bash e da tela no OS X Lion.

Quando estou em uma sessão de tela, volto pelo histórico do bash e chego a um comando que é longo o suficiente para ser quebrado.

Eu poderia primeiro digitar algum comando:

selassid@tem02:~$ ls ljmix/fiftyfifty_softsphere/T0.350/r2.43/0.565421311859c0.1
83279836214c0.144847759343/

Isso funciona corretamente, conforme descrito acima, mas se eu pressionar para acessá-lo através do histórico do bash, o console exibirá apenas:

83279836214c0.144847759343/

Portanto, o prompt e toda a primeira linha do comando estão ausentes, o que dificulta a edição; se eu voltar para a primeira linha, ela aparecerá, mas substituirá a última linha de saída. Quando executo o comando, o restante da primeira linha é exibido e tudo parece como o esperado:

selassid@tem02:~$ ls ljmix/fiftyfifty_softsphere/T0.350/r2.43/0.565421311859c0.1
83279836214c0.144847759343/
total 1792
...
selassid@tem02:~$ 

O mais curioso é que, se usar o histórico para acessar o comando longo, mas ainda não o executar, use qualquer C-acomando de tela, como alternar para outra janela e depois voltar, ou se eu clicar na janela atual do terminal e de volta a ele, o comando history agora é exibido corretamente novamente.

Meu, PS1='\u@\h:\w$ 'então não há nada de estranho acontecendo lá.

Existe uma maneira de mostrar corretamente todo o comando ao usar o histórico? Tentei brincar com as configurações de quebra de tela, mas elas só pioram as coisas.

stty -a mostra:

speed 9600 baud; 46 rows; 80 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
    -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
    -extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8
    -ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
    -dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
    eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
    min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
    stop = ^S; susp = ^Z; time = 0; werase = ^W;
selassid
fonte
Você pode ecoar $ TERM quando estiver dentro da tela e fornecer a saída? Além disso, se você executar tput am; eco $ ?, o que você ganha?
Patrick Patrick
TERMé xterm-256colore tput am; echo $?apenas me dá 0. #
selassid
Além disso, isso só acontece quando você está percorrendo o histórico na parte inferior de uma janela; portanto, todo o texto deve ser movido para cima para mostrar a segunda linha do comando no seu histórico.
selassid
Qual é o resultado de stty -a?
Andy Smith
Adicionei na parte inferior da postagem. Corresponde ao que é produzido quando a tela não está sendo executada.
Selassid

Respostas:

1

Com base na resposta ao comentário acima, parece que você está substituindo TERM em um dos scripts de inicialização. Enquanto estiver dentro da tela, seu TERM deve ser definido como 'tela', não 'xterm-256color'.

Eu examinaria seus scripts de inicialização do shell. ~ / .bashrc, / etc / bash / bashrc e possivelmente outros como ~ / .bash_profile e / etc / profile, dependendo de como você configurou tudo. Se você vir alguma configuração de TERM = "...", será necessário removê-la.

Patrick
fonte
Isso era verdade, mas mesmo depois de removê-los, e verificar se TERM é "tela" dentro da tela ainda não resolve o problema.
Selassid
Você tem um ~ / .inputrc ou / etc / inputrc? Nesse caso, verifique se o modo de rolagem horizontal não está definido ou se está desativado.
Patrick
Eu tenho um ~ / .inputrc, mas o modo de rolagem horizontal não está definido e desativá-lo não altera o comportamento. Eu tenho input-meta e output-meta ativado e convert-meta desativado, mas remover essas configurações não altera o comportamento.
selassid