Primeiro, você precisa descobrir se as mensagens que você quer estão sendo enviadas para stdout ou stderr. No seu primeiro exemplo, você tem o stderr sendo redirecionado para stdout - essa é a parte "2 > & 1". Você também tem "/ dev / null" na linha de comando, o que não faz sentido. Por que "/ dev / null" aparece na linha de comando?
Em segundo lugar, você precisa decidir quais mensagens deseja ver. O sinalizador "-v" para grep
irá inverter a correspondência - somente as linhas que não corresponderem à sua sequência padrão serão impressas. O padrão que você está especificando é bastante preciso: talvez seja necessário tentar um padrão menos específico, como 'fixme:quartz'
, que, em virtude de seu comprimento mais curto, fará com que grep -v
não corresponda a mais linhas.
Se eu fosse você, faria algo assim:
Executable > log 2> err
Isso separa stdout e stderr em dois arquivos diferentes. Se eu quisesse encontrar a string "fixme: quartz", eu faria:
grep 'fixme:quartz' log
grep 'fixme:quartz' err
para decidir em qual arquivo olhar e, em seguida, use um editor de texto que suporte expressões regulares (como vim
) para encontrar o que eu queria.
Se isso não funcionar, ou se Executable
for executado por muito tempo e você quiser ver mensagens específicas, faça o procedimento acima e determine sua expressão regular usando vim
e descubra se a mensagem estiver em stdout ou stderr. Então você pode fazer isso:
Executable > log 2> err
tail -f log | grep 'fixme:quartz' # or whatever regular expression
Como Executable
é executado e produz mensagens, tail -f
os lerá periodicamente do arquivo "log" e imprimirá em seu próprio stdout, onde grep
filtrará por você.