Põe o resultado do comando na variável dentro do alvo do makefile

3

Estou tentando instalar algo no app da web do tomcat. Este é o começo do meu install target:

tomcat='locate --regex "^(/var/lib/tomcat[0-9]{1,2}/webapps/[^/]+/)AppName\.html$" -l 1 | tr -d "\n"'
echo "Tomcat: $tomcat"
# If the string is empty (no path matched) or the path does not exists (that should never really happen)
# terminate
if [ -z "$tomcat" ] || [ ! -f "$tomcat" ]; then 
  echo "Application not found on filesystem."
  exit 404
fi

No entanto, esta é a saída:

tomcat='locate --regex "^(/var/lib/tomcat[0-9]{1,2}/webapps/[^/]+/)AppName\.html -l 1 | tr -d "\n"'
/bin/sh: 1: Syntax error: Unterminated quoted string
makefile:77: recipe for target 'install' failed
make: *** [install] Error 2

Todos os outros afirmam que você pode usar ' (backtick) para atribuir o comando stdout output na variável. Eu até usei tr -d "\n" para deletar todos os caracteres da nova linha, eles podem aparecer. E o código funciona perfeitamente no shell:

XXXXX@debianvirtualbox:~$ tomcat='locate --regex "^(/var/lib/tomcat[0-9]{1,2}/webapps/[^/]+/)AppName\.html$" -l 1 | tr -d "\n"'
XXXXX@debianvirtualbox:~$ echo $tomcat
/var/lib/tomcat8/webapps/websight/AppName.html

O que mais há para corrigir?

    
por Tomáš Zato 02.10.2015 / 10:56

1 resposta

4
Sinais

$ são notórios em makefiles por causarem problemas porque são interpretados como marcadores de variável. Aqui apenas dobrando o da primeira linha deve fazer o truque:

AppName\.html$$"

Veja também outros posts para saber mais sobre problemas de escape do makefile.

    
por 02.10.2015 / 11:02

Tags