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