Suponha que eu tenha um código e ele esteja sendo executado em um modo muito detalhado. Essa verbosidade máxima expõe uma mensagem que eu gostaria de ler para ver como está tudo. No entanto, o terminal está inundado com outros conteúdos.
Existe uma maneira de filtrar grep a saída stderror sem fazer a transição do pipeline stderror para o pipeline stdout?
por exemplo,
my-command 2>&1 | grep something # ok, great; is it possible without the pipe shift?
Isso é possível?
i.e., maybe
my-command 2>(grep something)?
Responder1
Estou colocando essas duas opções como respostas, mesmo que elas realmente não respondam à pergunta (a resposta é “no bash, não”), caso alguém veja isso e para mostrar o método de troca de stdout e stderr e para ter a formatação correta (ao contrário dos comentários).
Resposta um: suponha que este seja um programa que você deseja executar (sei que não se parece com um comando, mas finja que é; substituatodosdisso com o comando e os argumentos que você realmente deseja executar):
{ echo stdout; echo stderr >&2; }
Agora, suponha que você queira usar apenas stderr para alguma coisa, mas mantenha o stdout como está.
{ echo stdout; echo stderr >&2; } 2> >(grep something)
Se isso fortodosse você fizesse isso, obteria todo o stdout e partes do stderr que contêm algo, todos intercalados. Você pode querer escrever stdout e stderr em arquivos separados para visualização posterior:
{ echo stdout; echo stderr >&2; } 2> >(grep something > errorfile) > outputfile
Para trocar stdout e stderr (e por que você deseja fazer isso), consultehttps://stackoverflow.com/questions/13299317/io-redirection-swapping-stdout-and-stderrpara uma explicação melhor do que posso dar.