
Se um argumento específico como "-y" ou "--yes" for passado, quero tornar o script não interativo e ignorar a confirmação do usuário. Também quero saber como passaria o argumento para outros scripts que fonte.
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:?}"
Responder1
Depende do que o seu script de instalação espera. Para manter as coisas simples, é melhor que sejam aceitos -y
e -q
como argumentos. Com isso, você pode alterar sua instrução case para que q
and autoConfirm
seja definido como -q
and -y
em vez de 1 (e nulo por padrão) e chame seu script de instalação como:
source installation $autoConfirm $q
Com essa alteração, use [[ $autoconfirm ]]
para verificar se está definido, em vez de (( autoConfirm ))
.