Essa mensagem é emitida no stderr como todas as mensagens de aviso e erro.
Você pode eliminar toda a saída de erro:
tail -f file 2> /dev/null
Ou para filtrar apenas as mensagens de erro que contêm truncate
:
{ tail -f file 2>&1 >&3 3>&- | grep -v truncated >&2 3>&-;} 3>&1
Isso significa, no entanto, que você perde o status de saída de tail
. Alguns shells têm uma pipefail
opção (ativada com set -o pipefail
) para esse pipeline relatar o status de saída, tail
se falhar. zsh
e bash
também pode relatar o status de componentes individuais do pipeline em seu $pipestatus
/ $PIPESTATUS
array.
Com zsh
ou bash
, você pode usar:
tail -f file 2> >(grep -v truncated >&2)
Mas tenha cuidado para que o grep
comando não seja aguardado; portanto, as mensagens de erro, se houver, podem ser exibidas após a tail
saída e o shell já começou a executar o próximo comando no script.
Em zsh
, você pode resolver isso escrevendo:
{ tail -f file; } 2> >(grep -v truncated >&2)
Isso é discutido na zsh
documentação em info zsh 'Process Substitution'
:
Há um problema adicional com >(PROCESS)
; quando isso é anexado a um comando externo, o shell pai não aguarda a conclusão do PROCESS e, portanto, um comando imediatamente seguinte não pode contar com a conclusão dos resultados. O problema e a solução são os mesmos descritos na seção MULTIOS na nota Redirection :: . Portanto, em uma versão simplificada do exemplo acima:
paste <(cut -f1 FILE1) <(cut -f3 FILE2) > >(PROCESS)
(observe que nenhum MULTIOS está envolvido), PROCESS será executado de forma assíncrona no que diz respeito ao shell pai. A solução alternativa é:
{ paste <(cut -f1 FILE1) <(cut -f3 FILE2) } > >(PROCESS)
Os processos extras aqui são gerados a partir do shell pai, que aguardará sua conclusão.
(
)
a um comando complexo{
}
?