【发布时间】:2013-10-09 16:09:12
【问题描述】:
如何使用 EOF 作为xargs 中的分隔符,以便读取整个文件?
例如
cat foo.py | xargs -d EOF -I % python -c %
我知道还有其他方法可以使上述示例正常工作,但我有兴趣学习如何使用 xargs 来做同样的事情。
【问题讨论】:
-
您能否详细说明您想要实现的目标是什么?
如何使用 EOF 作为xargs 中的分隔符,以便读取整个文件?
例如
cat foo.py | xargs -d EOF -I % python -c %
我知道还有其他方法可以使上述示例正常工作,但我有兴趣学习如何使用 xargs 来做同样的事情。
【问题讨论】:
由于命令行参数永远不能包含空字节,因此您的问题基本上预设了您的输入不包含空字节。因此,最简单的方法是使用空字节作为分隔符,从而保证将整个输入视为单个项目。
为此,请使用--null 或-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
【讨论】: