Eu tenho um script que pede entrada dos usuários no terminal, portanto caso o script seja chamado com stdout redirecionado para um arquivo, o usuário não tem contexto no prompt. Então, eu gostaria de duplicar o stdout para ambos os sites.
O script gera um cálculo, portanto ainda faz sentido permitir o redirecionamento stdout.
Mas se stdin for fornecido (tipo de comando sim ou contexto não interativo como um cron), faz sentido que a saída seja perfeitamente permitida para não ser exigida no tty.
Então, eu gostaria de fazer algum tipo de lógica como:
If (test -t 0 && ! test -t 1);
// Tell stdout to print everything to tty as well
Isso é possível? Ou é fundamentalmente inapropriado?
Observe que se você está preocupado com a string de prompt, geralmente ela deve ir para stderr. Isso é o que a maioria dos utilitários faz quando emite um aviso. Veja, por exemplo, o
read 'var?prompt
ou ksh/zsh/yash ou oread -p prompt var
debash
.Dessa forma, ele é mantido separado da saída normal, que você pode redirecionar com segurança.
Para ainda fazer o que você está pedindo e enviar a saída para o tty de controle também quando stdin está em um tty, mas stdout não está, em alguns shells, incluindo ksh93, zsh ou bash, você pode fazer:
Mas como isso
tee
é executado em segundo plano, você provavelmente descobrirá que sua saída para o terminal chega na hora errada. Por exemplo:Ele
before
foi até o tty apósread
emitir seu prompt.Então, em vez de fazer esses redirecionamentos globalmente, você precisaria fazê-lo para cada comando, ou pelo menos para cada grupo de comandos entre aqueles que emitem prompt ou gravam no stderr ou no terminal por si próprios, e mesmo assim no stdout/stderr de cada comando provavelmente seria exibido em uma ordem estranha.
(aqui usando
tee
o recurso interno do zsh quando um fd é redirecionado mais de uma vez).