Analizando el argumento de la línea de comando para omitir las confirmaciones del usuario

Analizando el argumento de la línea de comando para omitir las confirmaciones del usuario

Si se pasa un argumento específico como "-y" o "--yes", quiero que el script no sea interactivo y omitir la confirmación del usuario. También quiero saber cómo pasaría el argumento a otros scripts que obtengo.

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:?}"

Respuesta1

Depende de lo que espere su script de instalación. Para simplificar las cosas, es mejor aceptar -yy -qcomo argumentos. Con eso, puede cambiar su declaración de caso para que qy autoConfirmesté configurado en -qy -yen lugar de 1 (y nulo de forma predeterminada) y llamar a su script de instalación como:

source installation $autoConfirm $q

Con ese cambio, use [[ $autoconfirm ]]para verificar si está configurado, en lugar de (( autoConfirm )).

información relacionada