如何在xargs
中将EOF用作分隔符,以便读取整个文件?
E.g。
cat foo.py | xargs -d EOF -I % python -c %
我知道还有其他方法可以让上面的例子工作,但我有兴趣学习如何对xargs做同样的事情。
答案 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