问题描述:

我试图做的是有盐的设置基于从for循环的$i当前值内部主机的IP。我已经尝试了以下方法,但在修改包含以下行的网络脚本时失败:192.168.200.100,它存在于所有39个节点中。

for ((i=2; i<=30; i++)); do sudo salt -L "host$i.dev.mysite.com" cmd.run "sed -i "s/192.168.200.100/192.168.200.$i/" /etc/sysconfig/network-scripts/ifcfg-bond1; done"

结果我期待是有从192.168.200.100修改为192.168.200.2

host2.dev.mysite.com /etc/sysconfig/network-scripts/ifcfg-bond1 = 192.168.200.2 
host3.dev.mysite.com /etc/sysconfig/network-scripts/ifcfg-bond1 = 192.168.200.3 
host4.dev.mysite.com /etc/sysconfig/network-scripts/ifcfg-bond1 = 192.168.200.4 
host5.dev.mysite.com /etc/sysconfig/network-scripts/ifcfg-bond1 = 192.168.200.5 
host6.dev.mysite.com /etc/sysconfig/network-scripts/ifcfg-bond1 = 192.168.200.6 
host7.dev.mysite.com /etc/sysconfig/network-scripts/ifcfg-bond1 = 192.168.200.7 
etc... 
+0

什么不工作呢? – Inian

+0

这只是引用的问题。它应该是:'为我在{2..30}; do sudo salt -L“host $ i.dev.mysite.com”cmd.run“sed -i's/192.168.200.100/192.168.200。$ i /'/ etc/sysconfig/network-scripts/ifcfg-bond1 “; done' – hek2mgl

+0

@Inian,我收到这个链接如下:http://dpaste.com/3XK9J2Z –

像这样的事情每个hostX.dev.mysite.com bond1文件?

for ((i=2;i<=30;i++)); do 
    sudo salt -L "host${i}.dev.mysite.com" cmd.run "sed -r -i \"[email protected]([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)[0-9]{1,3}\[email protected]\[email protected]\" /etc/sysconfig/network-scripts/ifcfg-bond1" 
done 
+0

使用zsh时,我得到这个30x的'zsh:找不到匹配的结果:sed -ri s @([0-9] 1. [0-9] 1. [0-9] 1。)[0-9 ] 1 $ @ 12 @在/ etc/sysconfig/network中的脚本/的ifcfg-bond1.' 使用bash的时候,我收到这样的:'庆典:附近意外的标记语法错误'('' –

+0

我想你的剧本究竟它是如何写虽然它不是示数出来,我越来越相似,我张贴以上相同的行为。http://dpaste.com/3XK9J2Z sed的版本,我使用的是4.2.2。我对你的意思不确定通过sed是一个cmd.run参数。请详细说明一下吗? –

+0

我编辑了我的代码,请现在试试。 –