AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 446514
Accepted
jcubic
jcubic
Asked: 2018-05-29 08:57:47 +0800 CST2018-05-29 08:57:47 +0800 CST 2018-05-29 08:57:47 +0800 CST

Como reverter o código de erro no Makefile

  • 772

Eu quero testar se o arquivo contém um padrão (testes de jasmim ignorados que devem fazer minha compilação falhar, quando executados no travis).

Eu tenho um código assim:

skipped_tests:
    $(if $(shell grep -E 'iit|ddescribe' spec/terminalSpec.js), @false, @true)

o problema é que não recebo saída de grep, quando ele encontra as linhas que correspondem ao padrão. Eu quero isso para que eu possa ver qual linha causou o problema no travis build log. Existe uma maneira de reverter um código de erro de comando (retornar 0 quando não 0 for retornado e vice-versa)?

Eu também tentei isso:

skipped_tests:
    grep -E 'iit|ddescribe' spec/terminalSpec.js
    @test $$? -eq 0 # should it be -ne

mas isso ecoa uma linha que tem iite não falha e, se não encontrar a linha, falhará no grep.

grep make
  • 3 3 respostas
  • 2766 Views

3 respostas

  • Voted
  1. Best Answer
    uzsolt
    2018-05-29T10:21:17+08:002018-05-29T10:21:17+08:00

    Que tal agora?

    skipped_tests:
        @! grep -E 'iit|ddescribe' spec/terminalSpec.js
    
    • 3
  2. jcubic
    2018-05-29T09:34:15+08:002018-05-29T09:34:15+08:00

    Resolvi o problema chamando grep duas vezes

    skipped_tests:
        @grep -E 'iit|ddescribe' spec/terminalSpec.js || true
        $(if $(shell grep -E 'iit|ddescribe' spec/terminalSpec.js), @false, @true)
    

    Existe uma maneira melhor?

    Eu tentei algumas outras coisas, mas parece que o make está operando em strings (use str.replace no Makefile ou algo assim) porque se a saída do grep for a linha do código-fonte, ele dará um erro de sintaxe de outras soluções possíveis.

    • 2
  3. Yurij Goncharuk
    2018-05-29T09:38:28+08:002018-05-29T09:38:28+08:00

    Solução possível:

    Defina a variável no topo Makefilee use ifeq. Por exemplo:

    RESULT = $(shell grep ... 2>/dev/null && echo 0 || echo 1)
    . . .
    skipped_tests:
    ifeq ($(RESULT),0)
        . . .
    endif
    

    Mas grepserá executado em cada chamada de make, mesmo que skipped_tests não esteja chamando. Se esse alvo for chamado todas as vezes, também é uma solução.


    Considerando seus desejos. Se você deseja usar o grepresultado no destino várias vezes, pode usar a expressão de várias linhas. Suponha que eu tenha a seguir Makefile:

    all: target
    
    target:
        @res=`grep -E 'test|pttern' test.js` || { res="" ; : ; } ; \
            [ ! -z "$$res" ] && echo "Grep result: $$res" ; \
            ls ; \
            [ ! -z "$$res" ] && echo "Grep result: $$res" ; \
        :
    
    .PHONY: target
    

    e eu tenho o próximo test.jsno mesmo diretório:

    $ cat test.js
    pattern
    

    Se o padrão não corresponder, haverá o próximo resultado:

    $ make
    Makefile  test.js
    

    Se o padrão existir, haverá o próximo resultado:

    $ make
    Grep result: pattern
    Makefile  test.js
    Grep result: pattern
    

    Para facilitar a leitura, você pode alterar ``com res=$$(grep -E ...) || ....

    Claro que não é muito conveniente fazer comandos multilinha em uma chamada para o sistema (essa multilinha é uma sessão do interpretador), mas às vezes pode ser útil nos casos em que você precisa operar uma variável (variável de ambiente também).

    • 1

relate perguntas

  • resultados inesperados de `service | grep`

  • Leia o arquivo de texto com palavras e sua contagem de ocorrências e saída de impressão classificada

  • Comando ls | grep mostrando apenas diretórios (quando também deveria mostrar arquivos)

  • quando o grep conta e quando não

  • grep --line-buffered até X linhas?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve