ip route add funciona manualmente, mas lança “Error: um prefixo inet é esperado em vez de…” quando executado via script bash

2

Estou tentando executar um script que deve adicionar essa rota a uma tabela 11:

ip route add local 10.1.3.212 dev eth1  proto kernel  scope host  src 10.1.3.212 table 11

Se eu executar este comando manualmente, ele será bem-sucedido e eu poderei ver a entrada na tabela 11, mas se eu executar um script que faça o seguinte:

    if [[ ${IP_ROUTE} == local* ]]; then
        ip route add ${IP_ROUTE} table ${NEW_INTERFACE_TABLE} 2>>/home/ec2-user/script_output
    fi

em que $ {NEW_INTERFACE_TABLE} é 11, o script lança este erro:

 Error: an inet prefix is expected rather than "local 10.1.3.212 dev eth1  proto kernel  scope host  src 10.1.3.212 ".

Por favor me ajude, estou enlouquecendo.

    
por user1071840 10.09.2014 / 05:00

1 resposta

3

O problema é que ao expandir ${IP_ROUTE} , o texto é interpretado como um único parâmetro em vez de uma série de parâmetros. Isso deve acontecer se a variável for citada, o que não é o caso, por isso não deveria fazer isso.

Algumas coisas para verificar:

  • Conteúdo de IFS (você pode executar dentro do script set | grep -E '^IFS' ). Você deve obter algo como IFS=$' \t\n' , que é um valor padrão usual. Observe que o caractere de espaço é listado como separador de campo (a variável IFS contém exatamente isso).
  • Você está realmente usando o bash? Verifique se o seu shebang é #!/bin/bash em vez de apenas #!/bin/sh se você estiver usando-o.
  • Como você está atribuindo o conteúdo à variável IP_ROUTE ?
por 10.09.2014 / 12:55