我正在尝试使用 Ant 中的“exec”任务运行以下命令:
ls -l /foo/bar | wc -l
目前,我的执行官看起来像这样:
<exec executable="ls" outputproperty="noOfFiles">
<arg value="-l" />
<arg value="/foo/bar" />
<arg value="|" />
<arg value="wc" />
<arg value="-l" />
</exec>
'ls' 命令看起来有效,但很难将输出传送到 'wc'。有什么建议?
最佳答案
如果您使用 sh -c
正如 Aaron 建议的那样,您可以将整个管道作为单个 arg 传递,从而有效地执行以下操作:
sh -c "ls -l foo/bar | wc -l"
如果您使用单独的 args,它们将被 sh 使用,而不是传递给 ls(因此您只能看到当前目录)。
请注意,在我的系统上,
ls -l
包括找到的文件总数和列表,这意味着显示的计数比文件数多一个。所以建议:<exec executable="sh" outputproperty="noOfFiles">
<arg value="-c" />
<arg value="ls foo/bar | wc -l" />
</exec>
关于shell - 如何使用 Ant exec 任务运行管道命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3931608/