
Wenn ein bestimmtes Argument wie „-y“ oder „--yes“ übergeben wird, möchte ich das Skript nicht interaktiv machen und die Benutzerbestätigung überspringen. Ich möchte auch wissen, wie ich das Argument an andere Skripte weitergeben kann, die ich als Quelle verwende.
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:?}"
Antwort1
Dies hängt davon ab, was Ihr Installationsskript erwartet. Um die Dinge einfach zu halten, ist es am besten, wenn es -y
und -q
als Argumente akzeptiert. Damit können Sie Ihre Case-Anweisung so ändern, dass q
und auf und statt auf 1 (und standardmäßig null) autoConfirm
gesetzt sind , und Ihr Installationsskript wie folgt aufrufen:-q
-y
source installation $autoConfirm $q
Verwenden Sie mit dieser Änderung [[ $autoconfirm ]]
anstelle von , um zu prüfen, ob es festgelegt ist (( autoConfirm ))
.