我想取消注释etter.conf文件中的168行.该命令在终端中运行正常但我在perl中尝试时遇到错误.
system ("sed -i '168s/.*/redir_command_on = "iptables -t nat -A PREROUTING -i %iface -p tcp --dport %port -j REDIRECT --to-port %rport"/' /etc/etter.conf");
Run Code Online (Sandbox Code Playgroud)
错误是:
Bareword found where operator expected at ./attack.pl line 135, near
""sed -i '168s'/.*'/redir_command_on = "iptables"
Run Code Online (Sandbox Code Playgroud)
我认为这与特殊角色和逃脱有关.
所以Perl正在解析,它找到了一个字符串文字
system ("sed -i '168s/.*/redir_command_on = "
^ ^
| |
+-----------------------------------+
Run Code Online (Sandbox Code Playgroud)
接下来应该是什么)或运营商,但它是iptables.您没有正确形成字符串文字.切换分隔符可以解决这个问题:
system(q{sed -i '168s/.*/redir_command_on = "..."/' /etc/etter.conf})
Run Code Online (Sandbox Code Playgroud)
(q{...}和'...'.一样.)
顺便说一句,使用"列表形式" system更好,因为它避免了不必要的启动和使用shell,
system('sed', '-i', '168s/.*/redir_command_on = "..."/', '/etc/etter.conf')
Run Code Online (Sandbox Code Playgroud)