xargs - 使用EOF作为分隔符

时间:2013-10-03 04:57:51

标签: bash xargs

如何在xargs中将EOF用作分隔符,以便读取整个文件?

E.g。

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

我知道还有其他方法可以让上面的例子工作,但我有兴趣学习如何对xargs做同样的事情。

2 个答案:

答案 0 :(得分:3)

由于命令行参数永远不能包含空字节,因此您的问题基本上预先假定您的输入不包含空字节。因此,最简单的方法是使用空字节作为分隔符,从而保证整个输入将被视为单个项目。

为此,请使用--null-0选项:

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

或者,更简洁:

xargs -0  python -c  < foo.py

那就是说,我无法想象这对什么有用。如果你知道你只有一个输入项,那么为什么要使用xargs呢?为什么不写

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

答案 1 :(得分: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