ip route add 可以手动工作,但通过 bash 脚本运行时会抛出“错误:需要 inet 前缀而不是...”

ip route add 可以手动工作,但通过 bash 脚本运行时会抛出“错误:需要 inet 前缀而不是...”

我正在尝试运行一个脚本,将该路线添加到表 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 ".

请帮帮我,我快要疯了。

答案1

问题是,在扩展时${IP_ROUTE},文本被解释为单个参数,而不是一系列参数。如果变量被引用,则应该发生这种情况,但事实并非如此,所以不应该这样做。

要检查的一些事项:

  • 的内容IFS(您可以在脚本中运行set | grep -E '^IFS')。您应该得到类似于IFS=$' \t\n'通常的默认值的内容。请注意,空格字符被列为字段分隔符(IFS变量仅包含该字符)。
  • 您真的在使用 bash 吗?请检查您的 shebang 是否正在使用,#!/bin/bash而不仅仅是是否#!/bin/sh正在使用它。
  • 您如何将内容分配给IP_ROUTE变量?

相关内容