2016-06-02 13 views
0

Ich habe einen Job Jenkins mit einer Shell-Box ausführen. In der execute-Shell verwende ich bash anstelle von strich (sh). In der Ausführungs Shell I Strings haben, die, wie sie Escape-Sequenzen enthalten werden sollen interpretiert (in diesem Fall die neue Linie: \n), so ist hier ein Beispiel ausführen Shell:Jenkins Shell String Zitat Ersatz

#!/bin/bash 
set -x #echo on 
git fetch 
... 

git commit -m "Merging $DEVELOPEMENTBRANCH into $INITIALBRANCH\n\nThis is an example second paragraph." 
... 

Mein Problem hier ist, dass die Script-Block wird von Jenkins in eine Weise ausgelegt/ersetzt, dass er sein Verhalten ändert, um genau zu sein es die Variablen ersetzt und ersetzt die doppelten Anführungszeichen mit einfachen Anführungszeichen so in der Konsole Ausgabe, die es wie folgt aussieht:

[4] $ /bin/bash /tmp/hudson7542128982632971668.sh 
+ git fetch 
... 

+ git commit -m 'Merging my_feature into develop\n\nThis is an example second paragraph' 
... 

Aber Auf diese Weise wird der \n Teil wegen der einfachen Anführungszeichen nicht interpretiert. Was ist der Trick hier? Ich möchte die Anführungszeichen beibehalten oder zumindest die \n Sequenzen interpretieren.

+0

Riska, können Sie es bitte mit "\" versuchen, $ DEVELOPEMENTBRANCH in $ INITIALBRANCH zu integrieren \ n \ nDies ist ein Beispiel für einen zweiten Absatz. \ ""? – Shubhangi

+0

Es funktioniert nicht so, wie es wird: "" my_feature in Entwicklung integrieren \ n \ nDies ist ein Beispiel zweiter Absatz "'. Da die einzelnen Anführungszeichen außerhalb des Ergebnisses liegen, ist das Ergebnis das gleiche (mit einem zusätzlichen Doppelanführungszeichen um die Nachricht herum) –

+0

Für das mehrzeilige 'git' commit msg haben Sie folgende Antworten aus http://stackoverflow.com/a/ ausprobiert 5064653/6128602? – luka5z

Antwort

0

git commit -m "A multi-line\n\ncommit message" wird sowieso keine mehrzeilige Commit-Nachricht erzeugen. Die Commit-Nachricht wird wörtlich A multi-line\n\ncommit message sein. Doppel-Anführungszeichen führen nicht dazu, dass bashprintf Escape-Sequenzen interpretiert.

Um eine mehrzeilige Commit-Nachricht, die Sie benötigen zu erhalten:

git commit -m "`printf \"A multi-line\n\ncommit message\"`" 

Dies funktioniert in einem Jenkins Shell Schritt in Ordnung.

+0

Danke, es hat den Trick gemacht! –

+0

Wenn die Shell bash ist und nicht '/ bin/sh', könnte man den Leistungsaufwand der Befehlsersetzung vermeiden, indem man 'git commit -m $' Eine mehrzeilige \ n \ ncommit Nachricht '' verwendet. –