Wenn ich versuche, diesen Befehl in einer Jenkins-Pipeline zu erstellen, erhalte ich einen Fehler bezüglich dieser Syntax. Bevor ich diesen Befehl ausführt, wird in Jenkins Formularfeld eine Warnung mit roter Syntax angezeigt, die unerwartetes Zeichen enthält: '\'.
Was kann ich tun, um Fehler mit diesem Backslash zu ersetzen oder zu beheben?
Hinweis: Ich habe rm -fin diesem Moment für alle Fälle. Ersetzt alle rm -fzum findBefehl in den Bühnenreinigungsordnern.
Tks im Voraus
Dieser hybride Schrägstrich hilft dir nicht? `∖`
user902300 vor 6 Jahren
0
Könnten Sie bitte Ihr Groovy-Skript (oder Pipeline oder was auch immer Sie verwenden, um diesen Befehl auszuführen) veröffentlichen?
jayhendren vor 6 Jahren
1
Auf dem Fragenkörper das groovige Skript eingefügt. @ Jayhendren
Marlon vor 6 Jahren
0
Da der Schrägstrich den folgenden einfach ersetzt, müssen Sie möglicherweise nur ir entfernen.
davidgo vor 6 Jahren
0
@davidgo In diesem speziellen Fall ist der Backslash unbedingt erforderlich, um sicherzustellen, dass das Semikolon von find und nicht von der Shell analysiert wird.
jayhendren vor 6 Jahren
1
3 Antworten auf die Frage
3
Aarkon
Es könnte helfen, Ihrem Fluchtcharakter zu entkommen, so komisch das auch klingen mag. Setzen Sie einfach einen weiteren Backslash vor Ihren Backslash:
stage ("cleaning folders"){ sh ''' find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} \\; ''' }
Zumindest markiert IntelliJ dies nicht als syntaktisch falsch.
Das klingt gut. Tks!
Marlon vor 6 Jahren
0
0
jayhendren
Eigentlich würde ich mir in Ihrem Fall nicht die Mühe machen, die richtige Flucht zu finden:
stage ("cleaning folders"){ sh ''' find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} + ''' }
Wenn Sie ein Semikolon passieren zu -exec, baut mehrere Befehle zu finden, eine für jedes Ergebnis der Suchoperation (zB rm -f /root/logfiles/instance/file1.log, rm -f /root/logfiles/instance/file2.log, ...), aber wenn man ein Plus verwenden, finden Konstrukte einen einzigen Befehl mit mehreren Argumenten, die eine effiziente viel mehr und schnell (zB rm -f /root/logfiles/instance/file1.log /root/logfiles/instance/file2.log ...). Weitere Informationen finden Sie auf der Manpage (sorry, ich kann die Manpage leider nicht zitieren oder kann im Moment nicht mehr detailliert angeben; ich bin mobil).
0
jikuja
Eine Lösung wäre die Verwendung von Dollar-Slashy, wodurch die Interpolation von Strings deaktiviert und Escape-Zeichen in $ geändert werden.
stage ("cleaning folders"){ sh script: $/ find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} \; /$ }