使用-d
xargs 中的标志来指定分隔符似乎会在最后一个值之后添加换行符。无论哪种方式,当使用替换将值粘贴到命令中间时,它都会导致命令中断(与让 xargs 将值传递到命令末尾的更“标准”方式相比)。
换句话说,这只发生在使用-d
和-I
标记并将值粘贴到命令中间时。
我怎样才能解决这个问题?
例子:
# echo "server1 server2 server3 server4"|xargs -r -d" " -I+ echo ssh + "sudo service myservice restart"
ssh server1 sudo service myservice restart
ssh server2 sudo service myservice restart
ssh server3 sudo service myservice restart
ssh server4
sudo service myservice restart
请注意,最后一个命令由换行符偏移。如果命令以换行符结束,这将不是问题,但在这种情况下不会。
我" null"
通过添加到传递给 xargs 的列表末尾并忽略由此产生的错误来解决此问题。但这是一个糟糕的解决方案,在某些情况下是危险的。
我的解决方法:
# echo "server1 server2 server3 server4 null"|xargs -r -d" " -I+ echo ssh + "sudo service myservice restart"
ssh server1 sudo service myservice restart
ssh server2 sudo service myservice restart
ssh server3 sudo service myservice restart
ssh server4 sudo service myservice restart
ssh null
sudo service myservice restart