¿Cómo salir si la declaración en bash sin salir del programa?

Reescribiendo esta pregunta para evitar más votos negativos, ya que es demasiado tarde para eliminarla:

Estoy escribiendo un script que le pide confirmación a un usuario y antessourcing Algunos otros guiones. Para simplificar el código, imagine que hay dos scripts que podrían sersourced, pero quiero que el usuariosource ninguno o exactamente uno de los guiones, no ambos. Estaba tratando de usar una declaración del formularioif true source-script else exit que no funcionaba porque saldría delif declaración, pero también el script en su conjunto, y no tendría la oportunidad de hacer la limpieza necesaria. Originalmente, mi guión se parecía a esto:

echo "This script might do something terrible to your computer."
read -p "Do you wish to continue? (y/[n]) " -n 1;
echo
if ! [[ $REPLY =~ ^[Yy]$ ]]
then
    source "terrible_script.sh"
    # want some way to ensure that we don't prompt the user about the next script
    # don't want to just exit if the response is 'n' because we have to do cleanup
fi

echo "This script might do something really good to your computer."
read -p "Do you wish to continue? (y/[n]) " -n 1;
echo
if ! [[ $REPLY =~ ^[Yy]$ ]]
then
    source "good_script.sh"
fi

# do cleanup here
# regardless of whether or not any scripts were sourced

@ charles-duffy proporcionó la respuesta: simplemente envuelva los mensajes en una función. Algo como:

function badscript() {
    echo "This script might do something terrible to your computer."
    read -p "Do you wish to continue? (y/[n]) " -n 1;
    echo
    if ! [[ $REPLY =~ ^[Yy]$ ]]
    then
        source "terrible_script.sh"
        return 0
    fi
}

function goodscript() {
    echo "This script might do something really good to your computer."
    read -p "Do you wish to continue? (y/[n]) " -n 1;
    echo
    if ! [[ $REPLY =~ ^[Yy]$ ]]
    then
        source "good_script.sh"
    fi
}

if ! badscript
then
    goodscript
fi

# cleanup code here

Respuestas a la pregunta(3)

Su respuesta a la pregunta