如何使用 EOF 作为分隔符xargs
以便读取整个文件?
例如
cat foo.py | xargs -d EOF -I % python -c %
我知道还有其他方法可以使上述示例正常工作,但我有兴趣学习如何使用 xargs 做同样的事情。
由于命令行参数永远不能包含空字节,因此您的问题基本上预设了您的输入不包含空字节。因此,最简单的方法是使用空字节作为分隔符,从而保证将整个输入视为单个项目。
为此,请使用--null
or-0
选项:
cat foo.py | xargs --null -I % python -c %
或者,更简洁:
xargs -0 python -c < foo.py
也就是说,我无法想象这有什么用。如果您知道您将永远只有一个输入项,那么为什么要使用xargs
呢?为什么不直接写
python -c "$(< foo.py)"
?
因为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