bash: errore di sintassi vicino al token imprevisto `-o '


0

Ricevo un errore durante l'esecuzione di uno script bash per il backup dei rami git:

Lo script è il seguente:

#!/usr/local/bin/bash
# this shebang assumes you have bashv4 installed. If not, use /bin/bash

echo "running backup branch script"

current_branch="$(git branch | grep '\* ' | sed 's/^.*\( .*\)/\1/g')"

dltbranch() {
    git push origin --delete $1
    git push upstream --delete $1
    git branch -D $1
}

backup_branch() {
    git checkout $1
    git checkout -b backup__$1
    dltbranch $1
}

reset_branch() {
    the_new_current_branch="$(git branch | grep '\* ' | sed 's/^.*\( .*\)/\1/g')"
    echo "$the_new_current_branch"
    if [ ! $the_new_current_branch = $1 ]; then
        git checkout $1
    fi
}

branch_is_protected(){
    if [[ "$1" == dev* ]] -o [[ "$1" == "master"]] -o [[ "$1" == backup* ]]
    then
        echo "protected"
        exit 1
    else
        echo "not protected"
        exit 0
    fi
}

backup_all_branches(){
    branches="$(git for-each-ref refs/heads | cut -d/ -f3-)"
    echo $branches

    for branch in `echo "$branches"`; do

        backup_branch "$branch";
        # echo "$branch"
    done
}

Come previsto, non ho errori nella shellcheck e non riesco a vedere alcun errore. Il problema viene risolto commentando ilbranch_is_protected

branch_is_protected(){
    if [[ "$1" == dev* ]] -o [[ "$1" == "master"]] -o [[ "$1" == backup* ]]
    then
        echo "protected"
        exit 1
    else
        echo "not protected"
        exit 0
    fi
}

inserisci qui la descrizione dell'immagine

Qualsiasi aiuto apprezzato, ty

Risposte:


0

Prova a utilizzare ||per rappresentare:

branch_is_protected(){
    if [[ "$1" == dev* || "$1" == "master" || "$1" == backup* ]]
    then
        echo "protected"
        exit 1
    else
        echo "not protected"
        exit 0
    fi
}

sai perché? tutti raccomandano il doppio
codyc4321,

Ho cambiato per if [ "$1" = dev* ] -o [ "$1" = "master"] -o [ "$1" = backup* ]ottenere line 39: [: too many arguments. la riga 39 è quella riga con tutti i test []
codyc4321

Confermo, non funziona neanche.
SYN,

Veramente testato - aggiornata la risposta
D Schlachter il

ooooooooo ok ha senso
codyc4321
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.