Qual é o sentido de redirecionar a saída do grep para / dev / null?

24

Considere esta linha:

${libdir}/bin/licenseTool check "${SERIAL}" "${VERSION}" "${PRODUCT}" ${libdir} | grep '^200' >/dev/null

Qual é o objetivo de procurar o padrão na saída se o resultado de que é jogado fora?

E, se uma linha como essa aparece como a última coisa em um script bash, o valor de saída é retornado ao responsável pela chamada do script ou ignorado? (Eu estou especulando se podemos assumir que isso é feito apenas para efeitos colaterais ou retorna algo para o chamador de alguma forma.)

    
por JDługosz 23.04.2015 / 13:16

2 respostas

29

Sua suspeita está correta; o status de saída do último comando do script será passado para o ambiente de chamada. Portanto, a resposta é que esse script retornará um status de saída 0 se grep corresponder a alguma coisa nos dados, existir status 1 se não houver correspondência e sair do status 2 se algum erro ocorrer.

    
por 23.04.2015 / 13:23
27

O ponto de saída grep ping que é jogado fora é que o gravador deseja apenas o status de retorno de grep . Ele / ela só quer saber se um padrão combinou ou não. No seu caso, o último grep verifica se a saída do comando anterior contém linhas iniciadas com 200 .

No moderno sistema POSIX, você pode fazer tudo com grep -q sem redirecionando para /dev/null :

... | grep -q '^200'

Uma observação de que usar grep -q tem um efeito colateral menor, obrigado Stéphane Chazelas por apontar em seu comentário. grep -q sai assim que encontrar a primeira correspondência, se licenseTool ainda escrever algo após grep ter saído, receberá um SIGPIPE.

    
por 23.04.2015 / 13:29