
「-y」や「--yes」などの特定の引数が渡された場合、スクリプトを非対話型にして、ユーザーの確認をスキップしたいと思います。また、ソースとなる他のスクリプトに引数を渡す方法も知りたいです。
SHORT=yq
LONG=yes,quick
PARSED=$(getopt --options $SHORT --longoptions $LONG --name "$0" -- "$@")
eval set -- "$PARSED"
q=0; autoConfirm=0
while true; do
case "$1" in
-q|--quick)
q=1
shift
;;
-y|--yes)
autoConfirm=1
shift
;;
--)
shift
break
;;
*)
echo "Invalid option. Use -h for help"
exit 3
;;
esac
done
assertConfirmation () {
local promptMsg=$1 autoConfirm=$2
if (( autoConfirm )); then
return
else
clear
read -n 1 -p "$promptMsg (yes/No) "
printf '\n========================================================================'
if [[ $REPLY =~ ^([Yy])$ ]]; then
return
fi
fi
return 1
}
if assertConfirmation "Install this?" "${autoConfirm:?}"; then
install
fi
source installation "${autoConfirm:?}" "${q:?}"
答え1
インストール スクリプトが何を期待しているかによって異なります。シンプルにするには、 と を-y
引数として受け入れるようにするのが最適です。これにより、case ステートメントを変更して、 とを1 (デフォルトでは null) ではなくとに設定し、インストール スクリプトを次のように呼び出すこと-q
ができます。q
autoConfirm
-q
-y
source installation $autoConfirm $q
この変更により、[[ $autoconfirm ]]
の代わりに を使用して、設定されているかどうかを確認します(( autoConfirm ))
。