/etc/rc.local代码,
echo "rc.local has started successfully" > /home/sk/tmp/init.log
isEthConfigured=$(ifconfig eth0 | grep "inet addr")
echo "rc.local has run ifconfig command well, with result - $isEthConfigured" >> /home/sk/tmp/init.log
if [[ -z "${isEthConfigured// }" ]];then
echo "changing the iptables stuff" >> /home/sk/tmp/init.log
sudo iptables -A OUTPUT -d 10.199.48.0/24 -j REJECT
fi
echo "rc.local has completed successfully" >> /home/sk/tmp/init.log
exit 0*
如果我不使用 eth0 接口,我将添加 iptables 规则。但是,rc.local 并未运行 if 块内的代码。
在我的 init.log 中,我只看到一行消息,
rc.local has started successfully
那么,rc.local 是否可以访问 /sbin 文件夹中的二进制文件?
为什么 rc.local
不运行脚本的后半部分..
答案1
shell 使用 shebang 运行#!/bin/sh -e
。-e
表示 shell 必须在第一个返回非零状态/错误的命令处退出。
在我上面的代码中,grep "inet addr"
当找不到任何匹配项时,返回错误 1。这会导致 rc.local 出来。
为了抑制grep
返回错误,我将命令更改为,
isEthConfigured=$(ifconfig eth0 | grep "inet addr" || :)
真的很难找到,但感谢吉尔斯和其他人邮政。