Назад | Перейти на главную страницу

ip route add работает вручную, но выдает сообщение «Ошибка: ожидается префикс inet, а не…» при запуске через сценарий bash

Я пытаюсь запустить сценарий, который должен добавить этот маршрут в таблицу 11:

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

Если я запускаю эту команду вручную, она выполняется успешно, и я вижу запись в таблице 11, но если я запускаю сценарий, который выполняет следующие действия:

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

где $ {NEW_INTERFACE_TABLE} равно 11, скрипт выдает эту ошибку:

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

Пожалуйста, помогите, я схожу с ума.

Проблема при расширении ${IP_ROUTE}, текст интерпретируется как один параметр, а не как набор параметров. Это должно произойти, если переменная заключена в кавычки, а это не так, поэтому этого не следует делать.

Что нужно проверить:

  • Содержание IFS (вы можете запустить внутри скрипта set | grep -E '^IFS'). У вас должно получиться что-то вроде IFS=$' \t\n' что является обычным значением по умолчанию. Обратите внимание, что пробел указан как разделитель полей (IFS переменная содержит именно это).
  • Вы действительно используете bash? Убедитесь, что ваш shebang #!/bin/bash вместо просто #!/bin/sh если вы его используете.
  • Как вы присваиваете содержимое IP_ROUTE переменная?