Groovy syntax not working with backslashes











up vote
0
down vote

favorite












I'm trying to use a backslash on the command bellow at groovy syntax:



find /path/folder-* -type f -iname "file*" -exec rm -f {} ;


When I try to build this command on a Jenkins pipeline give me an error about this syntax. Even before I do this command have a warning with red syntax on Jenkins form field saying unexpected char: ''.



What could I do for replace or fix error with this backslash ?



Groovy commands:



node ("instance") {
stage ("cleaning folders"){
sh '''
find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} ;
'''
}
stage ("instance1"){
sh '''
rm -f /root/logfiles/instance1/*
echo instance1;
scp 100.0.0.50:/var/log/file1.log /root/logfiles/instance1/file1.log;
scp 100.0.0.50:/var/log/file2.log /root/logfiles/instance1/file2.log;
'''
}
stage ("instance1"){
sh '''
rm -f /root/logfiles/instance2/*
echo instance2;
scp 100.0.0.51:/var/log/file1.log /root/logfiles/instance2/file1.log;
scp 100.0.0.51:/var/log/file2.log /root/logfiles/instance2/file2.log;
'''
}
}


Notice: I have rm -f for all instances at this moment. Will substitute all rm -f to the find command on the stage cleaning folders.



Tks in advance










share|improve this question
























  • this hybrid slash wont help you? ` ∖ `
    – user902300
    May 26 at 13:43






  • 1




    Could you please post your Groovy script (or Pipeline, or whatever it is that you're using to run that command)?
    – jayhendren
    May 29 at 15:57










  • Pasted on question body the groovy script. @jayhendren
    – Marlon
    May 30 at 9:27










  • Since the slash character is simply escaping the following one, it may be that you just need to remove ir.
    – davidgo
    May 30 at 9:35






  • 1




    @davidgo in this particular case the backslash is definitely necessary to ensure the semicolon is parsed by find and not the shell.
    – jayhendren
    May 30 at 17:19















up vote
0
down vote

favorite












I'm trying to use a backslash on the command bellow at groovy syntax:



find /path/folder-* -type f -iname "file*" -exec rm -f {} ;


When I try to build this command on a Jenkins pipeline give me an error about this syntax. Even before I do this command have a warning with red syntax on Jenkins form field saying unexpected char: ''.



What could I do for replace or fix error with this backslash ?



Groovy commands:



node ("instance") {
stage ("cleaning folders"){
sh '''
find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} ;
'''
}
stage ("instance1"){
sh '''
rm -f /root/logfiles/instance1/*
echo instance1;
scp 100.0.0.50:/var/log/file1.log /root/logfiles/instance1/file1.log;
scp 100.0.0.50:/var/log/file2.log /root/logfiles/instance1/file2.log;
'''
}
stage ("instance1"){
sh '''
rm -f /root/logfiles/instance2/*
echo instance2;
scp 100.0.0.51:/var/log/file1.log /root/logfiles/instance2/file1.log;
scp 100.0.0.51:/var/log/file2.log /root/logfiles/instance2/file2.log;
'''
}
}


Notice: I have rm -f for all instances at this moment. Will substitute all rm -f to the find command on the stage cleaning folders.



Tks in advance










share|improve this question
























  • this hybrid slash wont help you? ` ∖ `
    – user902300
    May 26 at 13:43






  • 1




    Could you please post your Groovy script (or Pipeline, or whatever it is that you're using to run that command)?
    – jayhendren
    May 29 at 15:57










  • Pasted on question body the groovy script. @jayhendren
    – Marlon
    May 30 at 9:27










  • Since the slash character is simply escaping the following one, it may be that you just need to remove ir.
    – davidgo
    May 30 at 9:35






  • 1




    @davidgo in this particular case the backslash is definitely necessary to ensure the semicolon is parsed by find and not the shell.
    – jayhendren
    May 30 at 17:19













up vote
0
down vote

favorite









up vote
0
down vote

favorite











I'm trying to use a backslash on the command bellow at groovy syntax:



find /path/folder-* -type f -iname "file*" -exec rm -f {} ;


When I try to build this command on a Jenkins pipeline give me an error about this syntax. Even before I do this command have a warning with red syntax on Jenkins form field saying unexpected char: ''.



What could I do for replace or fix error with this backslash ?



Groovy commands:



node ("instance") {
stage ("cleaning folders"){
sh '''
find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} ;
'''
}
stage ("instance1"){
sh '''
rm -f /root/logfiles/instance1/*
echo instance1;
scp 100.0.0.50:/var/log/file1.log /root/logfiles/instance1/file1.log;
scp 100.0.0.50:/var/log/file2.log /root/logfiles/instance1/file2.log;
'''
}
stage ("instance1"){
sh '''
rm -f /root/logfiles/instance2/*
echo instance2;
scp 100.0.0.51:/var/log/file1.log /root/logfiles/instance2/file1.log;
scp 100.0.0.51:/var/log/file2.log /root/logfiles/instance2/file2.log;
'''
}
}


Notice: I have rm -f for all instances at this moment. Will substitute all rm -f to the find command on the stage cleaning folders.



Tks in advance










share|improve this question















I'm trying to use a backslash on the command bellow at groovy syntax:



find /path/folder-* -type f -iname "file*" -exec rm -f {} ;


When I try to build this command on a Jenkins pipeline give me an error about this syntax. Even before I do this command have a warning with red syntax on Jenkins form field saying unexpected char: ''.



What could I do for replace or fix error with this backslash ?



Groovy commands:



node ("instance") {
stage ("cleaning folders"){
sh '''
find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} ;
'''
}
stage ("instance1"){
sh '''
rm -f /root/logfiles/instance1/*
echo instance1;
scp 100.0.0.50:/var/log/file1.log /root/logfiles/instance1/file1.log;
scp 100.0.0.50:/var/log/file2.log /root/logfiles/instance1/file2.log;
'''
}
stage ("instance1"){
sh '''
rm -f /root/logfiles/instance2/*
echo instance2;
scp 100.0.0.51:/var/log/file1.log /root/logfiles/instance2/file1.log;
scp 100.0.0.51:/var/log/file2.log /root/logfiles/instance2/file2.log;
'''
}
}


Notice: I have rm -f for all instances at this moment. Will substitute all rm -f to the find command on the stage cleaning folders.



Tks in advance







bash find bash-scripting jenkins groovy






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited May 30 at 9:36









davidgo

41.5k74985




41.5k74985










asked May 26 at 8:02









Marlon

51212




51212












  • this hybrid slash wont help you? ` ∖ `
    – user902300
    May 26 at 13:43






  • 1




    Could you please post your Groovy script (or Pipeline, or whatever it is that you're using to run that command)?
    – jayhendren
    May 29 at 15:57










  • Pasted on question body the groovy script. @jayhendren
    – Marlon
    May 30 at 9:27










  • Since the slash character is simply escaping the following one, it may be that you just need to remove ir.
    – davidgo
    May 30 at 9:35






  • 1




    @davidgo in this particular case the backslash is definitely necessary to ensure the semicolon is parsed by find and not the shell.
    – jayhendren
    May 30 at 17:19


















  • this hybrid slash wont help you? ` ∖ `
    – user902300
    May 26 at 13:43






  • 1




    Could you please post your Groovy script (or Pipeline, or whatever it is that you're using to run that command)?
    – jayhendren
    May 29 at 15:57










  • Pasted on question body the groovy script. @jayhendren
    – Marlon
    May 30 at 9:27










  • Since the slash character is simply escaping the following one, it may be that you just need to remove ir.
    – davidgo
    May 30 at 9:35






  • 1




    @davidgo in this particular case the backslash is definitely necessary to ensure the semicolon is parsed by find and not the shell.
    – jayhendren
    May 30 at 17:19
















this hybrid slash wont help you? ` ∖ `
– user902300
May 26 at 13:43




this hybrid slash wont help you? ` ∖ `
– user902300
May 26 at 13:43




1




1




Could you please post your Groovy script (or Pipeline, or whatever it is that you're using to run that command)?
– jayhendren
May 29 at 15:57




Could you please post your Groovy script (or Pipeline, or whatever it is that you're using to run that command)?
– jayhendren
May 29 at 15:57












Pasted on question body the groovy script. @jayhendren
– Marlon
May 30 at 9:27




Pasted on question body the groovy script. @jayhendren
– Marlon
May 30 at 9:27












Since the slash character is simply escaping the following one, it may be that you just need to remove ir.
– davidgo
May 30 at 9:35




Since the slash character is simply escaping the following one, it may be that you just need to remove ir.
– davidgo
May 30 at 9:35




1




1




@davidgo in this particular case the backslash is definitely necessary to ensure the semicolon is parsed by find and not the shell.
– jayhendren
May 30 at 17:19




@davidgo in this particular case the backslash is definitely necessary to ensure the semicolon is parsed by find and not the shell.
– jayhendren
May 30 at 17:19










3 Answers
3






active

oldest

votes

















up vote
3
down vote



accepted










It might help to escape your escape character, as funny as this might sound. Just put another backslash in front of your backslash:



stage ("cleaning folders"){
sh '''
find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} \;
'''
}


At least IntelliJ does not mark this as syntactically wrong.






share|improve this answer





















  • It sound that worked fine. Tks!
    – Marlon
    Jun 7 at 3:57


















up vote
0
down vote













Actually in your case I would not even bother to figure out proper escaping:



stage ("cleaning folders"){
sh '''
find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} +
'''
}


When you pass a semicolon to -exec, find constructs multiple commands, one for each result of the find operation (e.g. rm -f /root/logfiles/instance/file1.log, rm -f /root/logfiles/instance/file2.log, ...), but when you use a plus, find constructs a single command with multiple arguments, which is much more efficient and fast (e.g. rm -f /root/logfiles/instance/file1.log /root/logfiles/instance/file2.log ...). See the man page for find for more detail (sorry I can't quote the man page or provide more detail right now; I'm on mobile).






share|improve this answer




























    up vote
    0
    down vote













    One solution would be to use dollar slashy which disables string interpolation and changes escape char to $.



    stage ("cleaning folders"){
    sh script: $/
    find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} ;
    /$
    }





    share|improve this answer





















      Your Answer








      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "3"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1326117%2fgroovy-syntax-not-working-with-backslashes%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      3 Answers
      3






      active

      oldest

      votes








      3 Answers
      3






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes








      up vote
      3
      down vote



      accepted










      It might help to escape your escape character, as funny as this might sound. Just put another backslash in front of your backslash:



      stage ("cleaning folders"){
      sh '''
      find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} \;
      '''
      }


      At least IntelliJ does not mark this as syntactically wrong.






      share|improve this answer





















      • It sound that worked fine. Tks!
        – Marlon
        Jun 7 at 3:57















      up vote
      3
      down vote



      accepted










      It might help to escape your escape character, as funny as this might sound. Just put another backslash in front of your backslash:



      stage ("cleaning folders"){
      sh '''
      find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} \;
      '''
      }


      At least IntelliJ does not mark this as syntactically wrong.






      share|improve this answer





















      • It sound that worked fine. Tks!
        – Marlon
        Jun 7 at 3:57













      up vote
      3
      down vote



      accepted







      up vote
      3
      down vote



      accepted






      It might help to escape your escape character, as funny as this might sound. Just put another backslash in front of your backslash:



      stage ("cleaning folders"){
      sh '''
      find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} \;
      '''
      }


      At least IntelliJ does not mark this as syntactically wrong.






      share|improve this answer












      It might help to escape your escape character, as funny as this might sound. Just put another backslash in front of your backslash:



      stage ("cleaning folders"){
      sh '''
      find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} \;
      '''
      }


      At least IntelliJ does not mark this as syntactically wrong.







      share|improve this answer












      share|improve this answer



      share|improve this answer










      answered May 30 at 9:49









      Aarkon

      463




      463












      • It sound that worked fine. Tks!
        – Marlon
        Jun 7 at 3:57


















      • It sound that worked fine. Tks!
        – Marlon
        Jun 7 at 3:57
















      It sound that worked fine. Tks!
      – Marlon
      Jun 7 at 3:57




      It sound that worked fine. Tks!
      – Marlon
      Jun 7 at 3:57












      up vote
      0
      down vote













      Actually in your case I would not even bother to figure out proper escaping:



      stage ("cleaning folders"){
      sh '''
      find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} +
      '''
      }


      When you pass a semicolon to -exec, find constructs multiple commands, one for each result of the find operation (e.g. rm -f /root/logfiles/instance/file1.log, rm -f /root/logfiles/instance/file2.log, ...), but when you use a plus, find constructs a single command with multiple arguments, which is much more efficient and fast (e.g. rm -f /root/logfiles/instance/file1.log /root/logfiles/instance/file2.log ...). See the man page for find for more detail (sorry I can't quote the man page or provide more detail right now; I'm on mobile).






      share|improve this answer

























        up vote
        0
        down vote













        Actually in your case I would not even bother to figure out proper escaping:



        stage ("cleaning folders"){
        sh '''
        find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} +
        '''
        }


        When you pass a semicolon to -exec, find constructs multiple commands, one for each result of the find operation (e.g. rm -f /root/logfiles/instance/file1.log, rm -f /root/logfiles/instance/file2.log, ...), but when you use a plus, find constructs a single command with multiple arguments, which is much more efficient and fast (e.g. rm -f /root/logfiles/instance/file1.log /root/logfiles/instance/file2.log ...). See the man page for find for more detail (sorry I can't quote the man page or provide more detail right now; I'm on mobile).






        share|improve this answer























          up vote
          0
          down vote










          up vote
          0
          down vote









          Actually in your case I would not even bother to figure out proper escaping:



          stage ("cleaning folders"){
          sh '''
          find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} +
          '''
          }


          When you pass a semicolon to -exec, find constructs multiple commands, one for each result of the find operation (e.g. rm -f /root/logfiles/instance/file1.log, rm -f /root/logfiles/instance/file2.log, ...), but when you use a plus, find constructs a single command with multiple arguments, which is much more efficient and fast (e.g. rm -f /root/logfiles/instance/file1.log /root/logfiles/instance/file2.log ...). See the man page for find for more detail (sorry I can't quote the man page or provide more detail right now; I'm on mobile).






          share|improve this answer












          Actually in your case I would not even bother to figure out proper escaping:



          stage ("cleaning folders"){
          sh '''
          find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} +
          '''
          }


          When you pass a semicolon to -exec, find constructs multiple commands, one for each result of the find operation (e.g. rm -f /root/logfiles/instance/file1.log, rm -f /root/logfiles/instance/file2.log, ...), but when you use a plus, find constructs a single command with multiple arguments, which is much more efficient and fast (e.g. rm -f /root/logfiles/instance/file1.log /root/logfiles/instance/file2.log ...). See the man page for find for more detail (sorry I can't quote the man page or provide more detail right now; I'm on mobile).







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered May 30 at 17:29









          jayhendren

          228210




          228210






















              up vote
              0
              down vote













              One solution would be to use dollar slashy which disables string interpolation and changes escape char to $.



              stage ("cleaning folders"){
              sh script: $/
              find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} ;
              /$
              }





              share|improve this answer

























                up vote
                0
                down vote













                One solution would be to use dollar slashy which disables string interpolation and changes escape char to $.



                stage ("cleaning folders"){
                sh script: $/
                find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} ;
                /$
                }





                share|improve this answer























                  up vote
                  0
                  down vote










                  up vote
                  0
                  down vote









                  One solution would be to use dollar slashy which disables string interpolation and changes escape char to $.



                  stage ("cleaning folders"){
                  sh script: $/
                  find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} ;
                  /$
                  }





                  share|improve this answer












                  One solution would be to use dollar slashy which disables string interpolation and changes escape char to $.



                  stage ("cleaning folders"){
                  sh script: $/
                  find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} ;
                  /$
                  }






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 21 at 10:43









                  jikuja

                  11




                  11






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Super User!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.





                      Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                      Please pay close attention to the following guidance:


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1326117%2fgroovy-syntax-not-working-with-backslashes%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      AnyDesk - Fatal Program Failure

                      How to calibrate 16:9 built-in touch-screen to a 4:3 resolution?

                      QoS: MAC-Priority for clients behind a repeater