0

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

例如

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

我知道还有其他方法可以使上述示例正常工作,但我有兴趣学习如何使用 xargs 做同样的事情。

4

2 回答 2

3

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

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

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

或者,更简洁:

xargs -0  python -c  < foo.py

也就是说,我无法想象这有什么用。如果您知道您将永远只有一个输入项,那么为什么要使用xargs呢?为什么不直接写

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

?

于 2013-10-03T05:07:10.790 回答
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
于 2013-10-03T05:44:53.607 回答