이것이 나의 출발점입니다: 쉘 스크립트 -find -exec 호출에서 사용자 정의 함수 실행 - Think Tank 101 - CC copyright 기반 Q&A 공유 플랫폼
하지만 포함 스크립트에 전달된 매개 변수를 기반으로 이 함수의 두 가지 다른 버전 중에서 선택해야 합니다. 작동하는 버전이 있지만 중복된 코드가 많이 있습니다. 더 나은 구현을 시도하고 있지만 이 경우에는 어떻게 해야 할지 잘 모르겠습니다.
핵심 코드는 다음과 같습니다.
cmd_force() {
git fetch;
git reset --hard HEAD;
git merge '@{u}:HEAD';
newpkg=$(makepkg --packagelist);
makepkg -Ccr;
repoctl add -m $newpkg;
}
cmd_nice() {
git pull;
newpkg=$(makepkg --packagelist);
makepkg -Ccr;
repoctl add -m $newpkg;
}
if [[ $force == "y" ]] ; then
export -f cmd_force
find . -mindepth 2 -maxdepth 2 -name PKGBUILD -execdir bash -c 'cmd_force' bash {} \;
else
echo "Call this with the -f option in case of: error: Your local changes to ... files would be overwritten by merge"
export -f cmd_nice
find . -mindepth 2 -maxdepth 2 -name PKGBUILD -execdir bash -c 'cmd_nice' bash {} \;
fi
나는 두 가지 별도의 기능을 가져야 한다고 생각하지 않습니다. 몇 줄만 다릅니다. 실제 함수에는 더 많은 코드가 있지만 완전히 중복됩니다.
배우고 있기 때문에 매개 변수를 구문 분석하는 코드를 포함하지 않았습니다.선택 항목 가져오기그리고 그 부분은 아직 끝나지 않았습니다.
답변1
force
또한 이를 내보내고 if [[ $force == "y" ]]
함수로 이동할 수도 있습니다 .
cmd() {
if [[ $force == "y" ]] ; then
git fetch;
git reset --hard HEAD;
git merge '@{u}:HEAD';
else
git pull;
fi
newpkg=$(makepkg --packagelist);
makepkg -Ccr;
repoctl add -m $newpkg;
}
export -f cmd
export force
find . -mindepth 2 -maxdepth 2 -name PKGBUILD -execdir bash -c 'cmd' bash {} \;
답변2
함수 이름을 인수로 사용할 수 있습니다.
if [[ $force == "y" ]] ; then
USE=cmd_force
else
echo "Call this with the -f option in case of: error: Your local changes to ... files would be overwritten by merge"
USE=cmd_nice
fi
export -f $USE
find . -mindepth 2 -maxdepth 2 -name PKGBUILD -execdir bash -c $USE' {}' \;