Mover a entrada digitada pelo terminal para uma nova linha quando o aplicativo / script do console exibe o texto de saída

1

Situação atual: Quando um aplicativo / script foi iniciado como um processo em segundo plano de um terminal e está fornecendo saída para o console (ou seja, para STDOUT, portanto, nenhum redirecionamento de saída), quando digito algo no terminal, e o processo em execução gera algo para o terminal, bem no mesmo momento, o processo 'saída fica' anexado 'ao que eu estava digitando naquele momento e, assim, visualmente, a entrada e a saída são truncadas juntas.

Resultado desejado: Eu me pergunto se é possível ter o salto de entrada "até agora digitado" na próxima linha sempre que o processo de segundo plano exibir sua saída no terminal (ou seja, ter sempre o texto de entrada exibido) na última linha automaticamente, separadamente da saída em andamento).

Basicamente eu estou procurando uma maneira de obter os mesmos resultados que o comando " logging synchronous " permite em IOS em dispositivos Cisco (melhor exemplo here ) que, uma vez ativado, pega o que você digitou até agora e o coloca em uma nova linha (sempre a última) sempre que houver alguma saída "relacionada ao sistema" exibida durante a digitação.

Material adicional: Eu sei que, embora visualmente o texto de entrada e saída esteja misturado, se eu continuar digitando o meu comando até o fim e pressionar Enter ele irá executar bem, é muito difícil descobrir exatamente o que você digitou quando a saída te pega desprevenida.

Eu estou no Debian Jessie com o Gnome, então estou usando o Bash com o Terminal Gnome padrão, mas o mesmo comportamento é exibido ao usar um console virtual (por exemplo, depois de CTRL + ALT + F1).

Não tenho certeza se existe alguma maneira muito fácil, conhecida e óbvia de fazer isso que estou perdendo, mas tenho procurado a melhor parte da última hora sem sucesso, então peço desculpas se isso é um acéfalo.

Ou esse recurso (se existir) depende do aplicativo de terminal usado?

Obrigado por qualquer entrada.

    
por atux 30.08.2017 / 17:31

2 respostas

1

Uma opção é redirecionar o STDOUT e o STDERR para um arquivo ao fazer o background do trabalho.

ls &> job.txt &
[1] 13160
[1]+  Done                    ls &>job.txt

Em seguida, verifique se há trabalhos em execução

jobs
[1]+  Running                 yes &>/dev/null &

Você também pode forçá-los em primeiro plano e interromper ou espiar o job.txt para verificar seu status (assumindo que eles não armazenam em buffer a saída).

fg 1

Quando as tarefas são concluídas, você deve ser notificado no terminal após o próximo comando ser concluído (no bash, isso não interrompe a digitação do comando).

Eu suponho que há uma razão pela qual você não está fazendo isso. Não tenho certeza se você pode fazer o background com Crtl - z e obter o redirecionamento de i / o.

    
por 30.08.2017 / 18:02
1

Não há um modo "mágico" automático de que eu saiba.

Se o seu terminal estiver no modo cozido (como é o caso ao executar aplicativos simples que não são fullscreen nem têm suporte readline ou semelhante, como cat por exemplo), você pode pressionar o caractere "reimprimir" da disciplina de terminal que é Ctrl + R para mim, veja a página de manual rprnt in stty e a saída stty -a . Isso vai pular para a próxima linha e reimprimir o texto que você está digitando.

Se você estiver executando aplicativos fullscreen ou com reconhecimento de linha, provavelmente todos eles têm seus próprios caminhos (geralmente Ctrl + R ou Ctrl + L ) da repintura da tela ou da linha atual.

    
por 30.08.2017 / 21:37