Analysieren von Befehlszeilenargumenten zum Überspringen von Benutzerbestätigungen

Analysieren von Befehlszeilenargumenten zum Überspringen von Benutzerbestätigungen

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 -yund -qals Argumente akzeptiert. Damit können Sie Ihre Case-Anweisung so ändern, dass qund auf und statt auf 1 (und standardmäßig null) autoConfirmgesetzt 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 )).

verwandte Informationen