Bash関数でこのオプション解析コードをクリーンアップするにはどうすればよいですか? 印刷用に単純な「-h」フラグが必要な多くの関数にコピーアンドペーストされます。むしろ、論理的に同等の汎用ルーチンが必要です
local prefix_opt1
local prefix_opt2
....
__handle_opts "usage message" "additional getopts flags" "prefix"
例えば:
local foo_k
local foo_v
__handle_opts "Usage: ${FUNCNAME[0]}" [-k key -v version] widget\nBuild a widget using the key and version." "k:v:" "foo_"
if [[ -z $foo_k ]] ; then
foo_k="default value"
fi
.....
関数は、自分の dot-bashrc ファイルで「ソース化」されます。
コードは次のようになります (注: 一部の関数はフラグを介してオプションを取ります)。
function kitten_pet {
local usage="Usage: ${FUNCNAME[0]} [-h] <kitten>\nPet the kitten."
################################################
local help=0
local error=0
local OPTIND
local opt
while getopts ":h" opt "$@"
do
case $opt in
h)
echo -e "$usage"
help=1
break
;;
\?)
echo "Invalid option: -$OPTARG"
error=1
break
;;
esac
done
if [ $error -gt 0 ] || [ $help -gt 0 ] ; then
return 1
fi
shift $((OPTIND-1))
################################################
if [ $# -lt 1 ]
then
echo -e "$usage"
return 1
fi
__kitten_pet "$1"
}
通常は、node-commander や node-optimist などを使用して、スクリプト作成のニーズに合わせて JavaScript (またはおそらく Python) でスクリプトを記述しますが、今回は Bash を機能させようとしています。しかし、バッシュは私をバッシングしています。