6 votes

Ma fonction bash ne s'exécute qu'une fois par terminal ouvert

Lorsque j'essaie d'exécuter ma fonction bash, définie dans .bashrc, pour la deuxième fois dans le même terminal, cela ne fonctionne pas.

Le code est le suivant :

function nos (){
    local option
        while getopts cs option
            do
            case $option in
                s)
                    #start my server
                ;;
                c)
                    local cdir="~/mydirectory"
                    local cdir_arg=""
                    case $OPTARG in
                        p)
                            local cdir_arg="anotherdirectory"
                        ;;
                    esac
                    local cdir="${cdir}${cdir_arg}"
                    cd $cdir
                    ;;
                *)
                    echo 'This function doesnt have Super Cow Powers'
                    return 1
                ;;
            esac
    done
}

Je dirige ça :

nos -c

il va dans ~/mondirectory

Ok, ça a marché.

mais ensuite je fais ça :

cd ~
nos -c

et rien ne se passe.

7voto

Schof Points 952

En getopts garde la trace de l'état d'avancement des options par le biais de l'option OPTIND variable. La deuxième fois que vous exécutez la fonction, $OPTIND a conservé sa valeur de l'appel précédent, donc le Shell pense qu'il a déjà fini de traiter les options. Voir la description de getopts dans le manuel pour plus d'informations.

Déclarer OPTIND y OPTARG comme local à la fonction.

Il y a une autre erreur dans votre fonction, qui est que ~ n'est pas développée entre guillemets. Faites en sorte que local cdir=~/mydirectory o local cdir="$HOME/mydirectory"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X