2016-06-17 43 views
6

Jestem bardzo zły w skryptach powłoki (z bash), szukam sposobu na sprawdzić, czy bieżący oddział git jest "x", i przerwać skrypt, jeśli nie jest "x".skrypt bash, aby sprawdzić, czy bieżący git branch = "x"

#!/usr/bin/env bash 

    CURRENT_BRANCH="$(git branch)" 
    if [[ "$CURRENT_BRANCH" -ne "master" ]]; then 
      echo "Aborting script because you are not on the master branch." 
      return;  # I need to abort here! 
    fi 

    echo "foo" 

ale to nie jest całkiem w porządku

+2

Z uwagi na to, że Twój kod jest nieprawidłowy pod względem składni, [sprawdzanie powłoki. net] (http://shellcheck.net) powinno być Twoim pierwszym odwołaniem. – mklement0

Odpowiedz

16

Użyj nazwy git rev-parse --abbrev-ref HEAD, aby uzyskać nazwę bieżącej gałęzi.

Wtedy to tylko kwestia po prostu porównywania wartości w skrypcie:

BRANCH=$(git rev-parse --abbrev-ref HEAD) 
if [[ "$BRANCH" != "x" ]]; then 
    echo 'Aborting script'; 
    exit 1; 
fi 

echo 'Do stuff'; 
+1

Nota boczna: 'git rev-parse --abbrev-ref HEAD' to właściwa metoda dla tej sprawy, w której chcesz odzyskać coś (a nie błąd), jeśli HEAD jest odłączony. Aby odróżnić odłączoną obudowę HEAD, należy zamiast tego użyć 'git symbolic-ref HEAD'. – torek

3

Chcesz użyć exit zamiast return.

4

Jedną z opcji byłoby analizować dane wyjściowe polecenia na git branch:

BRANCH=$(git branch | sed -nr 's/\*\s(.*)/\1/p') 

if [ -z $BRANCH ] || [ $BRANCH != "master" ]; then 
    exit 1 
fi 

ale wariant, który używa git wewnętrzne polecenia, aby uzyskać tylko aktywną nazwę gałęzi sugerowaną przez @knittl, są mniej podatne na błędy i lepiej