Analisando o argumento da linha de comando para pular as confirmações do usuário

0

Se um argumento específico, como "-y" ou "--yes", for passado, desejo tornar o script não interativo e ignorar a confirmação do usuário. Eu também quero saber como eu passaria o argumento para outros scripts que eu 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:?}"
    
por Arturo 22.04.2017 / 21:44

1 resposta

0

Depende do que seu script de instalação espera. Para manter as coisas simples, é melhor aceitar os argumentos -y e -q como argumentos. Com isso, você pode alterar sua declaração de caso para que q e autoConfirm sejam definidos como -q e -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 )) .

    
por 22.04.2017 / 21:55