iFr*_*cht 5 command-line options utilities
编写 CLI 工具,我面临一个难题。
该工具应该检测图像中的人脸并自动模糊它们。但是,有时只应执行其中一项操作即可使用外部工具手动标记其他面。所以我想支持三种行为:
我解决这个问题的想法是两个相互排斥的选项,比如--only-detect
和--only-blur
。
但是,一位同事建议使用--detect
and可能更有意义--blur
,因此使用这两个选项会导致与使用 none 相同的行为,但我发现这不太直观。
我现在的问题是:我可以遵循任何惯例来做出这个决定吗?我找到了POSIX Utility Conventions,他们确实提到了互斥组,但这里没有任何帮助。
POSIX 只是说(关于 POSIX 实用程序中互斥的命令行选项):
除非实用程序描述另有说明,否则使用相互冲突的互斥参数会产生未定义的结果。
某些命令行工具具有冲突的命令行选项(例如--silent
选项和--verbose
选项)。在调用工具时同时使用这两个选项的情况下,如果允许,最后解析的选项(行中的最后一个)通常会获胜。
将使用--blur
和的最后一个--detect
。该文档将指定哪些选项是排他性的。
例如,ls -l -C
与ls -C -l
进行比较。
其他工具只是禁止冲突的命令行选项,在标准错误流上向用户提供诊断消息,并在发生这种情况时以非零退出代码退出。
如果同时使用--blur
和--detect
,您的代码会出错。
这是在cut
具有冲突标志的eg中完成的-b
,-c
和-f
。
某些工具可能会根据调用的名称提供不同的效果。因此,您的工具可以有两个名称(硬链接),一个detectface
称为blurface
. 这些将是完全相同的二进制文件,但程序将确定它被调用的名称,以确定要执行的操作。
这在系统上很常见,其中一些 shell 伪装成/bin/sh
(POSIX shell)和它自己(例如bash
在 Linux 或ksh
OpenBSD 上)并且sh
在调用时切换到“POSIX模式” sh
,或者您可能有一个编译器同时编译 C和C ++代码,并根据是否它援引作为开关模式cc
或c++
等(均为gcc
和clang
执行此)。
归档时间: |
|
查看次数: |
1993 次 |
最近记录: |