'find' valor de retorno: A página man do find está errada?

5

A página find man diz:

-execdir command {} + always returns true, while -execdir command {} ; returns true only if command returns 0.

e

EXIT STATUS find exits with status 0 if all files are processed successfully, greater than 0 if errors occur.

Mas se eu testar isso, obtenho o comportamento oposto:

 $ find . -execdir false '{}' \; ; echo $?      
 0

 $ find . -execdir false '{}' \+ ; echo $?      
 1

Alguém pode explicar isso?

Com -exec em vez de -execdir , obtenho os mesmos resultados. Eu tentei find (GNU findutils) 4.6.0 e 4.4.2 .

    
por jofel 26.04.2016 / 11:43

1 resposta

6

Esse "retorno" não é o código de saída de find , mas o valor de retorno da ação -execdir para fins de encadeamento de várias ações find juntas. Se você tentar:

find . -execdir false '{}' \; -print

então -print nunca é executado (ou seja, não há saída), enquanto os dois:

find . -execdir true '{}' \; -print
find . -execdir false '{}' + -print

imprima todos os caminhos.

No entanto, ao usar + , o código de saída de find é definido: é diferente de zero se qualquer chamada do comando sair diferente de zero, enquanto que para ; o código de saída não é afetado (diretamente) pelos resultados do comando. Este comportamento é exigido pelo POSIX para -exec , eu suponho indicar falhas que de outra forma seriam indetectável:

If the primary expression is punctuated by a <plus-sign>, the primary shall always evaluate as true, and the pathnames for which the primary is evaluated shall be aggregated into sets. [...] If any invocation returns a non-zero value as exit status, the find utility shall return a non-zero exit status.

-exec ... \; não está especificado como afetando o código de saída, portanto, o comportamento padrão de find de sair de zero, a menos que tenha ocorrido um erro. Um comando -exec ... \; saindo de um valor diferente de zero não é considerado um erro, portanto, na ausência de algum outro erro, o código de saída será sempre zero.

    
por 26.04.2016 / 11:57