2013-10-03 2 views
0

Как использовать EOF в качестве разделителя в xargs так, чтобы весь файл был прочитан?xargs - использовать EOF в качестве делиметра

Э.Г.

cat foo.py | xargs -d EOF -I % python -c %

Я знаю, что есть и другие способы, чтобы получить приведенный выше пример для работы, но я заинтересован в том, как сделать то же самое с xargs.

+0

Не могли бы вы уточнить, что вы пытаетесь достичь? – devnull

ответ

3

Поскольку аргументы командной строки никогда не могут содержать нулевые байты, ваш вопрос по существу предполагает, что ваш ввод не содержит нулевых байтов. В результате простейшим подходом является использование нулевых байтов в качестве разделителя, гарантируя тем самым, что весь ввод будет рассматриваться как отдельный элемент.

Чтобы сделать это, используйте --null или -0 вариант:

cat foo.py | xargs --null -I % python -c % 

Или, более сжато:

xargs -0 python -c < foo.py 

То есть, я не могу представить, что это полезно для. Если вы знаете, что у вас будет только один элемент ввода, то зачем вообще использовать xargs? Почему бы не просто написать

python -c "$(< foo.py)" 

?

+0

Да, я знаю об альтернативах - мне просто интересно, можно ли достичь того же, используя xargs. Благодаря! – jeffreyveon

1

Для xargs, чтобы прочитать весь файл и превратить его в один аргумент, было бы бесполезным поведением.

То, что вы пытаетесь сделать с:

# replace % with the contents of foo.py and pass as an argument 
cat foo.py | xargs -d EOF -I % python -c % 

можно сделать так:

# pass contents of foo.py as a single argument 
python -c "$(cat foo.py)" 

но какой смысл, так как вы можете сделать:

python foo.py 
Смежные вопросы