【发布时间】:2019-01-30 20:08:41
【问题描述】:
我想通过 xargs 将文件内容作为引用的程序参数传递以跳过临时文件创建。
使用临时文件我可以这样做:
myprogram > /tmp/lld.json
zabbix_sender -z 127.0.0.1 -s testhost -k llditem -o "`cat /tmp/lld.json`"
rm /tmp/lld.json
但我不希望对/tmp/lld.json 进行这种额外操作。
所以我尝试像这样使用xargs:
myprogram |
xargs -e -I'{}' zabbix_sender -z 127.0.0.1 -s testhost -k llditem -o "'{}'"
使用 xargs 手册页指导:
-我替换-str
-e[eof-str] ...如果省略eof-str,则没有文件结尾字符串..
但xargz 对每一行执行zabbix-sender 多次。
我猜-I 和-e 选项是互斥的选项。但我也假设我误解了xargs 手册..
【问题讨论】:
-
似乎
xargs不是您在这里需要的工具(至少从您的原始描述来看),实际上,通过直接传递myprogram输出,除了shell 本身之外没有其他工具作为-o参数,即:zabbix_sender -z 127.0.0.1 -s testhost -k llditem -o "$(myprogram)"(这里$(...)构造相当于反引号) -
谢谢,@jjo!您的评论听起来令人沮丧,因为..
myprogram是 bash-script 中的多行.. -
我看到了将 bash 脚本代码转换为函数的解决方法,然后我可以像这样使用它:
myfunct() { ...; }; zabbix_sender -z 127.0.0.1 -s testhost -k llditem -o "$(myfunct)",这不是我想要的。但它有效.. -
似乎
xargs -e允许将多行执行为单行,这从这个简单的实验中可以看出:echo -en "1\n2" | xargs -e echo 34输出:34 1 2。另一种解决方法 - 将 JSON 文档转换为单个字符串
标签: xargs