我试图编写一个非常简单的脚本来检查iptables是否已经更新,以便Synergy正常工作。目前的脚本是:
if [[ $SYNERGY = "yes" ]]
then
echo "Synergy is active"
else
sudo iptables -I INPUT -p tcp --dport 24800 -j ACCEPT
export SYNERGY=yes
fi
但它不起作用(每次打开新终端时,我总是要求输入sudo密码)
我也试过这个修改过的版本,但结果是一样的
syn="yes"
if [ "$SYNERGY" = "$syn" ]
then
echo "Synergy is active"
else
sudo iptables -I INPUT -p tcp --dport 24800 -j ACCEPT
export SYNERGY=yes
fi
问题出在哪里?
答案 0 :(得分:3)
如果您希望从一个终端/ shell会话运行并影响其他无关的终端/ shell会话,则问题在于export
的工作原理并非如此。
export
在当前进程的环境中设置变量,以便从此进程生成的任何进程也在其环境中拥有它。注意我是怎么说的“催生”的?它仅适用于处理生成的进程。不相关的流程不受影响。
如果你想要一个全局可检查的东西,你需要一个某种类型的标志/锁/状态文件或iptables配置的实际运行时检查。
答案 1 :(得分:0)
只是为了帮助那些有同样问题的人,这就是我设法保留防火墙设置的方法:
sudo apt-get install iptables-presistent
然后在/ etc / iptables中的rules.v4或rules.v6文件中指定的规则在启动时自动加载