!["find .. -exec .." 명령에서 반환 값을 얻으시겠습니까?](https://linux55.com/image/69108/%22find%20..%20-exec%20..%22%20%EB%AA%85%EB%A0%B9%EC%97%90%EC%84%9C%20%EB%B0%98%ED%99%98%20%EA%B0%92%EC%9D%84%20%EC%96%BB%EC%9C%BC%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
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"인 경우에만 업데이트됩니다 .find
check_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