A sintaxe do Groovy não funciona com barras invertidas

0

Estou tentando usar uma barra invertida no comando abaixo na sintaxe:

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

Quando eu tento construir este comando em um pipeline Jenkins, me dê um erro sobre essa sintaxe. Mesmo antes de fazer este comando tenho um aviso com sintaxe vermelha no campo de formulário Jenkins dizendo char inesperado: '\'.

O que eu posso fazer para substituir ou corrigir erros com essa barra invertida?

Comandos do Groovy:

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;
        '''
    }
}

Aviso: tenho rm -f para todas as instâncias neste momento. Substituirá todo o rm -f pelo comando find nas pastas de limpeza do palco.

Tks adiantados

    
por Marlon 26.05.2018 / 10:02

2 respostas

3

Pode ajudar a escapar do seu personagem de fuga, por mais engraçado que isso possa parecer. Basta colocar outra barra invertida na frente da sua barra invertida:

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

Pelo menos o IntelliJ não marca isso como sintaticamente errado.

    
por 30.05.2018 / 11:49
0

Na verdade, no seu caso, eu nem me preocuparia em descobrir um escape adequado:

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

Ao passar um ponto-e-vírgula para -exec , encontre construções de vários comandos, um para cada resultado da operação de localização (por exemplo, rm -f /root/logfiles/instance/file1.log , rm -f /root/logfiles/instance/file2.log , ...), mas quando você usa um mais, encontre construções um único comando com vários argumentos, que é muito mais eficiente e rápido (por exemplo, rm -f /root/logfiles/instance/file1.log /root/logfiles/instance/file2.log ... ). Veja a man page para encontrar mais detalhes (desculpe, não posso citar a man page ou fornecer mais detalhes agora; estou no celular).

    
por 30.05.2018 / 19:29