Obtém o valor de retorno do comando 'find .. -exec ..'?

3

Em um script bash, eu tenho uma função que faz algum processamento no argumento passado para ela. Eu gostaria de definir um valor de retorno dependendo de como o processamento foi. O problema é que a função é chamada de find ... -exec bash -c func , perdendo assim a chance de atualizar uma variável global dessa maneira, como error_code .

#!/bin/bash
check_file() {
    filename=$1
    echo -n "$filename ... "
    if [ ... ]; then
        echo "NOK"
# return/update error_code?
    else
        echo "OK"
    fi
}

export -f check_file
# look for exec binary only
find . -type f -executable -exec bash -c "file -i {} | grep -q 'application/x-executable; charset=binary'" \; -exec bash -c 'check_file "$0"' {} \;
# exit $error_code??

No caso de error_code ser uma variável global que a função pode atualizar, ela só será atualizada quando o processamento for 'NOK', pois find chamará muitas vezes a função check_file .

Como posso fazer isso com o script existente ou talvez precise de uma abordagem diferente?

    
por fduff 16.07.2015 / 16:59

1 resposta

1

Eu tenho o script para fazer o que eu queria, não é a solução mais elegante, mas faz o trabalho.

O shell principal cria um arquivo temporário, exporta seu nome para subshells subseqüentes, que podem gravar nele. O shell principal, em seguida, no final lê o código de retorno, exclui o arquivo temporário e retorna o valor do código de erro.

#!/bin/bash
export tmpf='mktemp'
rcode=0
echo $rcode > $tmpf
...

check_file() {
...
echo 1 > $tmpf
...
}
...
rcode='cat $tmpf'
rm -f $tmpf
echo "done."
exit $rcode
    
por 17.07.2015 / 09:46