Передать многострочный аргумент с помощью xargs - PullRequest
0 голосов
/ 16 января 2019

Я хочу передать содержимое файла в качестве аргумента программы в кавычках с 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 manpage:

-Я заменил-стр

-e [eof-str] ... Если eof-str опущено, конец строки файла отсутствует ..

http://man7.org/linux/man-pages/man1/xargs.1.html

Но xargz выполняется zabbix-sender много раз с каждой из строк.

Полагаю, что опции -I и -e являются взаимоисключающими. Но я также предполагаю, что неправильно истолковал руководство xargs.

1 Ответ

0 голосов
/ 29 января 2019

Будет ли это работать?

zabbix_sender -z 127.0.0.1 -s testhost -k llditem -o "`myprogram`"

Если вы настаиваете на использовании xargs, чтобы сделать именно это, тогда используйте -0:

myprogram | xargs -0 -I{} zabbix_sender -z 127.0.0.1 -s testhost -k llditem -o "'{}'"
...