Pergunta

Eu estou escrevendo um script de esperar e estou tendo tráfico de problemas com o shell prompt de (no Linux). Meu Esperar desova de script rlogin eo sistema remoto está usando ksh. O prompt no sistema remoto contém o diretório atual seguido por " > " (espaço maior do que o espaço). Um trecho de script poderia ser:

send "some command here\r"
expect " > "

Isso funciona para comandos simples, mas as coisas começam a dar errado quando o comando Estou enviando exceder a largura do terminal (ou mais precisamente, o que ksh acha que é a largura do terminal). Nesse caso, ksh faz algum rolagem horizontal estranho da linha de comando interativa, que parece reescrever o prompt e ficar um extra ">" na saída. Naturalmente, isso faz com que o esperam script para ficar confuso e fora de sincronia quando parece haver mais do que uma rápida na saída depois de executar um comando (o meu script contém vários pares send / expect).

Eu tentei mudar PS1 no sistema remoto para algo mais distintivo como "prompt>", mas um problema semelhante surge o que indica-me que não é o caminho certo para resolver isso.

O que eu estou pensando pode ajudar é a capacidade para o script para dizer esperar que "eu sei que estou devidamente sincronizado com o sistema remoto, neste ponto, então liberar o buffer de entrada agora." A declaração expect tem a bandeira -notransfer que não descartar tamponar a entrada, mesmo se o padrão faz jogo, então eu acho que eu preciso o oposto disso.

Existem outras técnicas úteis que eu possa usar para fazer a comportar shell remoto mais previsível? Eu entendo que esperar passa por um monte de trabalho para se certificar de que a sessão gerou aparece para ser interativo para o sistema remoto, mas eu prefiro que algumas das funcionalidades interactivas mais irritantes (tais como a rolagem horizontal de ksh) ser desligado.

Foi útil?

Solução

Se você quer jogar fora toda a saída de esperar tem visto até agora, tente

expect -re $

Este é um jogo de expressão regular em $, o que significa o fim do buffer de entrada, por isso vai simplesmente ignorar tudo recebidos até agora. Mais detalhes no Esperar página homem .

Outras dicas

Você poderia tentar "conjunto de várias linhas -o" ou colunas = 1000000 (ou algum outro valor suficientemente grande).

Eu tive dificuldade com ksh e esperar que no passado. Minha solução foi usar algo diferente ksh para um shell de login.

Se você pode alterar o login remoto para outro que não ksh (usando o comando chsh ou editar / etc / passwd), então você pode tentar isso com / bin / sh como shell.

Outra alternativa é dizer KSH que o terminal é um terminal burro - proibi-la de fazer qualquer processamento especial.

$ export TERM=""

pode fazer o truque.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top