2 votes

Passer une ligne de commande vide à un scriptsource

Mon script bash attend des arguments de ligne de commande que j'analyse sans problème. Cependant, le script appelle ensuite un autre script qui accepte également des paramètres positionnels, mais fournir des paramètres n'est pas obligatoire.

Quand mon script source s l'autre script sans arguments l'autre script essaie toujours d'analyser les arguments qui ont été donnés à mon script en premier lieu.

J'ai deux solutions, mais aucune ne me semble bonne.

  1. Con shift :

    # now making this script to handle branches:
    OPTIND=1
    while getopts "b:" opt; do
        case "$opt" in
            'b' ) branch=$OPTARG ;;
        esac
        shift
    done
  2. Passage d'un argument vide au deuxième script :

    source ${MINICONDA}/bin/activate ""

3voto

Charles Duffy Points 34134

Notez que ceci n'est pas nécessaire pour les appels normaux d'un script en tant que processus externe, mais seulement pour les invocations avec source ou . .

Pour fournir un contexte aux lecteurs, de l'aide intégrée de bash à source :

Si des arguments sont fournis, ils deviennent les paramètres positionnels lorsque filename est exécuté. Sinon, les paramètres positionnels sont inchangés.


La manière la plus simple de contrôler la liste des arguments est d'utiliser set -- arg1 arg2 ... pour l'écraser immédiatement avec une nouvelle liste. Ainsi :

orig_args=( "$@" )        # back up the original arguments
set --                    # clear the argument list

source whatever

set -- "${orig_args[@]}"  # if you ever need them back

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X