O que está acontecendo quando um script encontra um erro em um dos comandos?

2

Eu usei o alien para converter um RPM em um .deb. Eu NÃO usei conversão de script do estrangeiro; Estou convertendo à mão. De fato, o script fez barf em alguma sintaxe não compatível. Minha pergunta não é sobre como corrigir essa incompatibilidade, mas sobre como o script continua a executar com sucesso, apesar de encontrar um erro.

Esta é a seção problemática:

if [ "'/bin/echo '\c''" == "" ]; then
   ECHO_ESC="/bin/echo"
else
   ECHO_ESC="/bin/echo -e"
fi

Isso causa o seguinte "erro":

./avsetup_mcc: 11: [: \c: unexpected operator

Apesar disso, o script continua a executar perfeitamente. Então, o que está acontecendo aqui?

    
por chad 01.05.2013 / 22:09

1 resposta

2

[ não é um "especial interno" e, de acordo com POSIX Utility syntax error (option or operand error) de um% não especial especialShall not exit de um shell não interativo ("script").

Tanto quanto por que o shell não sai. O script funciona perfeitamente porque ECHO_ESC está definido como algo sensato, não importa como as ramificações if .

Diferentemente da mensagem de erro sugerida, o erro não vem do \c , mas do == , que é inválido para usar com [ (a igualdade da cadeia é testada com um único = ), mas shells compatíveis [[ (que suporta == ) parece permitir == mesmo para a notação de colchetes simples (por exemplo, bash , ksh ). Note que o código acima não não erro sob bash, então você pode querer considerar repetir sua pergunta.

    
por 01.05.2013 / 22:48