Linux
在 find -exec 呼叫中執行使用者定義的函式並根據參數選擇該函式的版本
這是我的起點:shell 腳本 -在 find -exec 呼叫中執行使用者定義的函式
但我需要根據傳遞給包含腳本的參數在 2 個不同版本的函式之間進行選擇。我有一個工作版本,但它有很多重複的程式碼。我正在嘗試更好地實現它,但我無法完全弄清楚如何在這種情況下做到這一點。
下面是核心程式碼:
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
我不認為我應該有兩個獨立的功能。只有幾行不同。實際的函式有更多的程式碼,但它們之間是完全重複的。
我沒有包含用於解析參數的程式碼,因為我正在學習getopt並且還沒有完成那部分。
您也可以導出
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 {} \;
您可以使用函式名稱作為參數:
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' {}' \;