migração de script de CentOs para Debian - mensagem de erro “[: 10: -lt: operador inesperado”

2

Como eu estava tentando executar um script em um novo ambiente, descobri este erro:

[: 10: -lt: unexpected operator

Aqui está a parte dolorosa do roteiro:

end=$((SECONDS+60))
while [ $SECONDS -lt $end ];
do
   # process some queue...
   sleep 5
done

Sistema de origem: versão do Amazon Linux AMI 2013.09 (cpe: / o: amazon: linux: 2013.09: ga)

Sistema de destino: Debian versão 6.0.7

Eu posso ler que as versões shell / bash / dash podem variar, mas isso ainda é bastante obscuro para mim. Eu tentei especificar o shell correto na primeira linha do script:

 #! /bin/bash

ou

 #! /bin/sh

sem chance ...

Também consegui descobrir que os usuários tinham mensagens de erro semelhantes ao usar o operador == em vez de =. Qual seria o substituto correto para então? Existe alguma outra solução? Qualquer sugestão é muito bem vindos!

    
por mika 02.10.2013 / 18:51

2 respostas

3

O Dash não suporta a variável de% de incrementação automática $SECONDS encontrada no Bash. Como a variável não tem valor, o comando test ( [ ) vê uma variável não definida antes do operador e produz o erro que você publicou.

Demonstração:

$ dash -c 'echo "[$SECONDS]"'
[]
$ bash -c 'echo "[$SECONDS]"'
[0]
$ dash -c '[ $var -lt 3 ]'
dash: 1: [: -lt: unexpected operator
$ dash -c 'var=1; [ $var -lt 3 ]'
$

Você pode usar o comando date para fazer a verificação. Esteja ciente de que isso pode ser caro, pois você pode chamar um utilitário externo várias vezes.

Pode haver outras maneiras de realizar o que você está tentando fazer, mas você não diz o que é isso.

Por favor, veja também BashFAQ / 068 .

    
por 03.10.2013 / 03:32
0

Altere a primeira linha do script para:

#!/bin/bash

Se você está no Debian e (1) como o bash e (2) sabe que o script foi escrito para um sistema que ligou / bin / bash em / bin / sh. Eu desisti de tentar usar scripts universais / bin / sh, é um exercício inútil se todo o sistema sob seu controle suportar bash.

Eu sei que é uma pergunta antiga, mas ninguém deu a resposta mais simples.

    
por 05.03.2016 / 10:15

Tags