2013-10-03 49 views
0

如何使用EOF作为xargs中的分隔符,以便读取整个文件?xargs - 使用EOF作为分隔符

E.g.

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