"find .. -exec .." 명령에서 반환 값을 얻으시겠습니까?

"find .. -exec .." 명령에서 반환 값을 얻으시겠습니까?

Bash 스크립트에는 전달된 인수에 대해 일부 처리를 수행하는 함수가 있습니다. 처리가 어떻게 진행되었는지에 따라 반환 값을 설정하고 싶습니다. 문제는 함수가 에서 호출되므로 find ... -exec bash -c func이런 방식으로 전역 변수를 업데이트할 수 있는 기회가 상실된다는 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??

함수가 전역 변수를 업데이트할 수 있는 경우 함수가 여러 번 호출되므로 error_code핸들이 "NOK"인 경우에만 업데이트됩니다 .findcheck_file

기존 스크립트를 사용하여 이 작업을 수행하려면 어떻게 해야 합니까? 아니면 다른 접근 방식이 필요할 수 있습니까?

답변1

내가 원하는 대로 스크립트를 실행하도록 했습니다. 가장 우아한 솔루션은 아니지만 작업이 완료되었습니다.

메인 셸은 임시 파일을 생성하고 그 이름을 쓸 수 있는 후속 하위 셸로 내보냅니다. 메인 쉘은 최종적으로 반환 코드를 읽고 임시 파일을 삭제한 후 오류 코드 값을 반환합니다.

#!/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

관련 정보