【发布时间】:2011-09-05 06:20:49
【问题描述】:
我不是以英语为母语的人,所以请原谅这个问题的尴尬标题。我只是不知道如何更好地表达它。
我在一个 FreeBSD 机器上,我有一个用C 编写的小过滤工具,它通过stdin 读取数据列表并通过stdout 输出处理列表。我有点像这样调用它:find . -type f | myfilter > /tmp/processed.txt。
现在我想给我的过滤器多一点曝光并发布它。约定说工具应该允许这样的事情:find . -type f | myfilter -f - -o /tmp/processed.text
这将迫使我编写根本不需要的代码,因为 shell 可以完成这项工作,因此我倾向于忽略它。
我的问题是:我是否遗漏了一些论点(除了约定之外),为什么文件的读取和写入应该在我的代码中完成,而不是委托给 shell 重定向?
【问题讨论】:
-
如果存在这样的约定,
grep之类的工具就不会遵循它。 -
如果人们期望从这样的工具中获得这些(无论它多么不合逻辑),那么遵循它们是有意义的。并且不要忘记 *nix 工具用于多对多环境。也许有些时候在 stdio 中使用参数更方便。
-
是的,grep 确实使用 -f,但您可以执行 grep 模式 FILENAMES,因此接受文件名参数,而不是仅从 STDIN 读取行。此外,grep 有 -r -D -d 参数——处理
directory in the argument list问题等等。每次都很好地有论据来处理例如@ikegami 告诉的情况。