xargs把前面执行的内容做为传给后面跟的命令
问题是传到哪个参数?
创建一个文本a.txt,里面有几行
aa
bb
cc
dd
cat a.txt|touch这样不行,提示:
touch: missing file operand
Try 'touch --help' for more information.
改为cat a.txt|xargs touch,就成功了
不过,touch本来就支持 touch aa bb cc dd这种写法。
touch了这些文件出来,删除也让xargs自动删除吧。
cat a.txt|rm一样不行,提示:
rm: missing operand
Try 'rm --help' for more information.
改为cat a.txt|xargs rm就成功了。但等等,rm aa bb cc dd,我们要一个个地确认才会删除,xargs为什么就不提示了?
这两个测试的命令都是允许带多个参数,还是不好理解它是如何带多个参数的,后面我想到ping,这个只能带一个参数了吧。
c.txt里面有
127.0.0.1
192.168.8.109
然后 cat c.txt|xargs ping 就卡死了,死得与 ping 127.0.0.1 192.168.8.109这个命令一样。
就是说xargs 其实只是把后面的内容转为一个串,后面跟的命令要支持这种一个串的处理,比如 kill
如果命令不支持一个串的处理,那-n1就是在这种情况下使用的了。
如:cat c.txt|xargs -n1 ping -c1
但不加-c1不知道结果不是我想要的。