Como Você Pode Resolver A Saída De Erro De Pipe Em Problemas Grep
November 1, 2021Recomendado: Fortect
Aqui estão algumas etapas simples para ajudá-lo a solucionar erros de pipe retornados por grep.
É provável que o Grep funcione apenas na entrada padrão, para que você precise converter um fluxo stderr preciso para uma forma que o grep possa analisar.
buck ./stdout-stderr.sh./stdout-stderr.sh: imprimir do mercado de stdout./stdout-stderr.sh: imprimir em stderr
? rrr ./stdout-stderr.sh> / dev / null./stdout-stderr.sh: em relação à impressão de stderr
Mas o grep não vai funcionar no stderr! Você confiaria em todos os comandos a seguir para permitir a exclusão de linhas, incluindo “err”, mas definitivamente não é o caso.
$ ./stdout-stderr.sh> / dev null | grep --invert-match err./stdout-stderr.sh: use para stderr
A seguinte sintaxe harrass pode ocultar a saída em relação ao stdout, mas certamente exibirá stderr ok, bobagem suficiente. Primeiro vamos para stdout versus dev / null, então vamos de stderr para stdout porque as substituições Unix só funcionam em stdout. Você ainda consegue escrever letras?
Recomendado: Fortect
Você está cansado de ver seu computador lento? Está cheio de vírus e malware? Não tema, meu amigo, pois Fortect está aqui para salvar o dia! Esta poderosa ferramenta foi projetada para diagnosticar e reparar todos os tipos de problemas do Windows, ao mesmo tempo em que aumenta o desempenho, otimiza a memória e mantém seu PC funcionando como novo. Então não espere mais - baixe o Fortect hoje mesmo!
$ ./stdout-stderr.sh 2> e apenas um em particular | > / dev / zero grep error./stdout-stderr.sh: imprimir em stderr
(Observe que o comando acima deve ser diferente de ./command> por dev / null 2> e um todo
, que é um comando muito comum).
Aqui está o script usado para os testes. Isso tornará a linha para a saída padrão e uma nova linha para o fluxo padrão:
#! / bin / sh# Imprimir mensagem para stdoutecho "$ 0: produzir para a saída padrão"# Imprimir correspondência de padrõeseco para "$ 0: pressione stderr"> & 2Saída 0
É muito mais fácil imaginar as coisas quando você precisa, você pode pensar no que realmente está acontecendo com a ajuda de “sequestros” e mais “assobios”. Os redirecionamentos e tubos Bash concluem seu trabalho: alterando onde o procedimento armazena manualmente o número entre os descritores 0, 1 e 2 (consulte para cada Proc / [pid] / fd ou *).
Se for um tubo nem “|” O operador está presente para fazer com cada uma de nossas linhas de comando, a primeira coisa importante que acontece é que o bash pode gerar um fifo, e os FD 1 do comando do grupo esquerdo indicam tal fifo, e simplesmente o FD 0 do correto O comando mentor aponta para este fifo especializado.
Em seguida, os trabalhadores de redirecionamento são avaliados para cada história individual à esquerda para serem diretamente, e a configuração atual é utilizada quando um identificador duplicado é originado (lado esquerdo) e FD0 (lado direito) já é sempre alterado após serem regularmente real, e qualquer duplicação pode revelar esse fato.
instrução 2> & 1> / dev por nulo | grep 'algo'
- pipeline feito (fifo). A “equipe FD1” provavelmente vai derrubar este belo tubo. “grep FD0” também é transportado para este canal
- Comando FD2 refere-se à variável de comando FD1 atual (canal)
- “Comando FD1” são positivos em / dev / zero
Toda a saída de todos os “comandos” está atualmente gravada em seu FD 2 (stderr), então ajuda a encontrar o caminho para a linha além disso, é lido por “grep” em cada uma de nossas outras páginas. Qualquer fonte que este “comando” grava em seu fd individual (stdout) geralmente vai para e dev / null.
command> para cada dev / null 2> & firstly | grep 'algo'
- qualquer tubo foi criado, bem como o “comando FD 1” e “grep FD 0” foram apagados.
- “Comando distinto FD” é específico de / dev / zero
- “Command FD 2” surge em qualquer lugar FD 1 (/ dev ou null) até agora
Portanto, a maior parte da saída de stdout e stderr vai devido ao “comando” para / dev / zero. Nada mais vai, e “grep” vai ser repentinamente fechado, não exibindo nada.
Observe que os bits (descritores de arquivo) (<) devem poder ser somente leitura (>) ou somente leitura (<>).
Bom ponto. Se o modelo compõe alguma coisa para FD1 ou FD2, provavelmente depende inteiramente do criador. A boa prática de programação determina que as mensagens de erro SMS devem ter um FD de 2 e uma saída FD normal de 1.
Em sistemas do tipo Unix, nesse ponto certamente existem dois caminhos de saída pelos quais, se deixados inalterados, enviarão o rendimento para sua tela atual. O erro padrão (ou stderr) sempre capturou o grande número perfeito de erros e, adicionalmente, condições de erro.
Para passar permissão para trabalhar com uma mensagem rejeitada para stderr, onde tem o mesmo fluxo de saída na “saída normal”, você deve concatenar o par exato. Para manter seu grep -v
correto em sua instância de, concatenar (stdout) e stderr usando nossa sintaxe pessoal obscura que você vê.
â €
sob exploit normal, erro padrà £ o command1, alà © m de som positivo Produto final padrão fixado via fonte padrão command2 tubo; fazê-lo pode ser descrito como uma abreviatura muito boa para 2> & pelo menos um |
. Esse desempenho foi em relação ao sequestro o erro básico total da saída é reproduzido posteriormente após cada redirecionamentos especificados em todo o processo de pedido.
Disponível como sugestões geirha, se você definitivamente quiser se livrar, eu diria do problema de stream padrão, aqui está o que a maioria das pessoas deseja fazer:
encontrou -list 'meuarquivo. * '2> - dev / null
find -domain name 'myfile. * '2> / tmp errorlog
E observe que sempre que você usa sequências de comando, como o mercado entre parênteses, pode estar capturando a saída de quais componentes de gerenciamento. Por exemplo
(find | egrep ^ [RS]. [0-9] + /. svg] | xargs noggin) -apenas um 2> / dev / null
Se você omitiu os parênteses além de, em vez disso –
Pesquisar
| egrep ^ [RS]. [0-9] + /. svg] | xargs intellect -1 2> Será versus dev / null
Você ainda deve ver erros de acesso negado sobre find ou egrep, mas stderr pode ser redirecionado para xargs.
Como você deve ter notado, é quase certo que você não executou o stderr corretamente, mesmo depois de olhar seu conteúdo naquele teste.
Observe que normalmente utilizar GNU e find
, pelo que eu sei, qualquer find
compatível com POSIX é sua opção para -print
. Você ainda pode transmitir isso claramente nos casos em que quiser.
Pipe Error Output To Grep
Wyjscie Bledu Potoku Do Grep
Pijpfoutuitvoer Naar Grep
Vyvod Oshibki Kanala V Grep
Output Dell Errore Di Pipe A Grep
Pipe Fehlerausgabe An Grep
Pipe Error Output Till Grep
Salida De Error De Tuberia A Grep
Grep에 파이프 오류 출력
Sortie D Erreur De Tuyau Vers Grep