Conditional grep sem opção silenciosa

6

Sempre achei que a opção silenciosa ( -q ) tinha que ser usada ao usar grep condicionalmente. Mas relendo a página man parece que deve funcionar sem ela.

Então, se você quiser imprimir correspondências e usá-las em uma condição, pode fazer algo como

grep PATTERN FILE && do_something_else

A única coisa que me deixa incerta é que parece haver uma pequena diferença no status de saída.

com -q ,

  • grep "sairá imediatamente com status zero se alguma correspondência for encontrada, mesmo que um erro tenha sido detectado ".

Sem -q

  • "O status de saída é 0 se as linhas selecionadas forem encontradas e 1 se não for encontrado. Se ocorrer um erro, o status de saída será 2 ".

Mas não consigo imaginar um exemplo em que a diferença se torne perceptível?

    
por BroSlow 16.11.2014 / 19:27

1 resposta

6

Veja um exemplo:

$ echo "foo" > file
$ grep foo file wrongfile; echo "Exit status: $?"
file:foo
grep: wrongfile: No such file or directory
Exit status: 2
$ grep -q foo file wrongfile;  echo "Exit status: $?"
Exit status: 0

Portanto, temos um arquivo chamado file que contém a string foo . Quando executei grep com -q on file e o inexistente wrongfile , já que file continha uma correspondência, grep saiu com 0 status apesar do erro "Nenhum arquivo".

    
por 16.11.2014 / 19:47

Tags