2016-10-17 3 views
1

Ich habe einen Befehl:Bash: Wie git Befehl Fehler zu fangen?

... 
{ 
    git filter-branch -f --env-filter "$ENVFILTER" >/dev/null 
    echo "Git updated. Run 'git push -f BRANCH_NAME' to push your changes." 
} || { 
    echo "Git failed. Please make sure you run this on a clean working directory." // this doesn't ever get called 
} 

Der glückliche Weg funktioniert, aber es sieht nicht wie die || jemals ausgeführt wird. So sieht ein Fehler aus:

[~/Documents/my-repo]$ my-custom-command                   
WARNING: Ref 'refs/heads/master' is unchanged 
Git updated. Run 'git push -f BRANCH_NAME' to push your changes. 
[ 

Gibt es eine Möglichkeit, diesen Fehler zu erfassen? Ich würde nicht einmal etwas dagegen, wenn es nur wurde passend zu dem WARNING: Ref 'refs/heads/master' is unchanged Zeichenfolge, die ausgedruckt wird (was ich übrigens verbergen möchte)

+0

die "Echo" Git aktualisiert "" Zeile tötet Ihren Fehlercode. Es setzt nur auf 0. –

+0

@ yellowantphil, wenn es eine Möglichkeit gibt, dass das "echo" scheitert, das heikel ist - siehe [diese Antwort] (http://stackoverflow.com/a/17203203/2877364) (was ich sehr fand) informativ, als ich darüber stolperte). – cxw

+0

@cxw dachte nicht daran. Ich dachte, die Yellowantphil-Syntax sei sehr gut. Aber ksh für immer :) Aber im Ernst, warum sollte Echo mit einem festen String-Argument scheitern? –

Antwort

5

den echo Befehl nach dem git wird unabhängig davon ausgeführt werden, was, das ist das erste Problem . Das zweite Problem ist, dass dieser echo Befehl den Fehlercode aktualisiert: erster Fehlercode wird überschrieben.

ich einen "klassischen" Ansatz vorschlagen würde (vielleicht ein bisschen altmodisch, ich mit KSH erhöht wurde):

git filter-branch -f --env-filter "$ENVFILTER" >/dev/null 
if [ $? = 0 ] ; then 
    echo "Git updated. Run 'git push -f BRANCH_NAME' to push your changes." 
else 
    echo "Git failed. Please make sure you run this on a clean working directory." 
fi 

etwas off-topic: MS-DOS/Windows-Benutzer damit überrascht werden , da in Windows, echo nicht ändert ERRORLEVEL

+0

wow nett! Ich werde es jetzt ausprobieren! – Edmund

+3

@Edmund können Sie auch inline: 'if git filter-branch -f --env-filter" $ ENVFILTER ">/dev/null; dann und alles andere gleich, wenn du etwas kürzer willst. – cxw

+0

Hah, ruft 'ksh'" altmodisch "... die Korn-Shell stammt nur aus dem Jahr 1983! https://en.wikipedia.org/wiki/Korn_shell (Zugegebenermaßen habe ich erst ein paar Jahre davor selbst angefangen ...) – torek

Verwandte Themen