Como stdin com tee ou outro tipo de tubos ou redirecionamento de saídas? [fechadas]

1

Digamos que eu queira ver a saída que um comando faz, como apt-get . No entanto, se eu fosse executar um comando redirecionando a saída como

apt-get install some-application -y > apt_out.txt

ou

apt-get install some-application -y | tee apt_out.txt

eu perderia a capacidade de interagir com a entrada do programa. No entanto, minha solução alternativa é usar uma sessão screen -L , mas haveria algo mais limpo?

    
por Guillaume Chevalier 24.09.2017 / 07:36

2 respostas

2

Vejamos isso em termos de conjuntos de recursos e comportamentos, em vez de alguma noção não especificada de limpeza .

Um menos mecanismo de propósito geral que screen -L , mas que faz para seus propósitos o que screen faz que tee não (isto é, permite fácil uso interativo e não fazer com que os programas caiam em seus modos de saída não-interativos ou em buffer quando eles acharem que a saída padrão não é um terminal), é o comando script .

script -c "apt-get install some-application" apt_out.txt

Um mecanismo diferente para script é ptybandage , que é adequado para uso em pipelines de comando, e não exige que seu próprio padrão I externo / O realmente é um terminal. (De fato, seu caso de uso primário é fazer I / O padrão não interativo parecer I / O padrão interativo para um programa filho.) É uma maneira de persuadir o programa a executar em seu modo interativo / line buffer enquanto ainda estiver usando a abordagem pipe-through- tee .

ptybandage apt-get install some-application 2>&1 | tee apt_out.txt

Leitura adicional

por 24.09.2017 / 09:09
0

screen -L parece uma boa solução para mim. Outra opção é script (isso registra caracteres de controle e erros de digitação também, o que alguns acham confuso).

Muitos programas testam para ver se suas entradas e saídas estão conectadas a um terminal ou não, e irão falhar ou mudar seu comportamento dependendo disso. Veja ls vs. ls | cat para um pequeno exemplo.

    
por 24.09.2017 / 08:41