Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

271
Visualizações
Capture el error estándar de Shell en el archivo MAKE

Tengo un problema con la función de shell en los archivos MAKE. Haciendo esto:

 var := $(shell some-command)

Me permite capturar la stdout de some-command .

Haciendo esto:

 var := $(shell some-command 2>&1)

Me permite capturar el stdout y el stderr de some-command .

¿Cómo capturo el stderr del propio shell?

Este archivo MAKE ilustra el problema:

 var1 := $(shell date 2>&1) var2 := $(shell ls aaa 2>&1) var3 := $(shell a-command-which-does-not-exist 2>&1) show-me: @echo var1: \"$(var1)\" @echo var2: \"$(var2)\" @echo var3: \"$(var3)\"

Producirá:

 /bin/sh: 1: a-command-which-does-not-exist: not found var1: "So 6. Feb 00:37:05 CET 2022" var2: "ls: cannot access aaa: No such file or directory" var3: ""

Me gustaría capturar /bin/sh: 1: a-command-which-does-not-exist: not found into var3 . es posible?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Tienes que ejecutarlo en una subcapa:

 var3 := $(shell $(SHELL) -c 'a-command-which-does-not-exist' 2>&1)

Lamentablemente, no hay otra manera.

ETA OK, lo descubrí. El problema es que si el shell invocado por la función $(shell ...) sale con un código de error de 127 (que es el código de salida del shell para cuando no puede encontrar un programa para ejecutar), entonces GNU make explícitamente escribe su salida en stderr en lugar de capturarla (si examinas la function.c:func_shell_base() verás esto).

Cualquier cambio en el shell que invoques que asegure que no salga con el código de salida 127 "solucionará" el problema:

 $ cat Makefile out := $(shell bad-program 2>&1 || exit 1) $(info out = $out) $ make out = /bin/sh: 1: bad-program: not found make: *** No targets. Stop.

Esto podría ser un error en la creación de GNU. Tendré que considerarlo.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda