Linux 命令行开关和参数是不是有标准? [关闭]

Posted

技术标签:

【中文标题】Linux 命令行开关和参数是不是有标准? [关闭]【英文标题】:Are there standards for Linux command line switches and arguments? [closed]Linux 命令行开关和参数是否有标准? [关闭] 【发布时间】:2012-02-15 22:50:40 【问题描述】:

这更多是关于程序的调用,而不是任何语言或解析器(尽管我确信解析器库的选择取决于此)。看,我使用了很多 Linux 命令行实用程序。并且有一些明显的模式; '-' 在短选项的单个字母之前,不带参数的多个选项可以组合,'--' 在选项的长版本之前,等等。

但是,在某些情况下,大写用于反转选项。因此,“-d”可能意味着作为守护程序运行,但“-D”将作为守护程序运行。 (如果您不想要它,为什么不直接省略选项?这一直不清楚,但它实际上很常见,所以我认为一定有一些原因。)但是在某些程序中,大写字母是一个完全不相关的选项。如果“-d”作为守护进程运行,“-D”可能是启用调试模式。这背后是否有某种总体原则,哪个是最好的选择?还是我们只是在处理“任何有效的”?

还有一些命令,除了(或代替)带参数的选项之外,只接受单独的参数。 cp 就是一个很好的例子;除了几个很少使用的切换之外,它接收的最后一个参数被假定为目标,并且选项列表和目标之间的任何参数都被假定为源。当“可以”依赖这样的顺序而不是使用带有参数的显式选项标志时,是否有经验法则?

【问题讨论】:

没有通用的命令行选项标准,尽管getopt 约定是一个很好的起点。要回答您关于反转选项的问题,默认值通常在配置文件中指定,因此您需要强制启用和强制禁用切换。 另一个很好的参考:Perl 长选项处理:Getopt::Long. 这能回答你的问题吗? Are there any standard exit status codes in Linux? 【参考方案1】:

一般来说是的。

IEEE GNU getopt

【讨论】:

我可能会使用 getopt,尽管它对标准没有太大帮助。但是,该 IEEE 链接非常有用。 如果您要自己实现解析器:找到适用于任何语言的解析器库的机会很高,有 java python c 的解析器库,我猜还有很多其他的.所以没有必要重新发明***。 实际上,重新发明***是我的工作 :P 但由于选项只解析一次,因此无需以可笑的速度运行。我就去getopt。【参考方案2】:

ESR 在他的“The Art of UNIX Programming”一书中收集了很多关于这方面的信息。这是一个sn-p。

-a 全部(无参数)。如果有一个 GNU 风格的 --all 选项,因为 -a 不是它的同义词,那将是相当令人惊讶的。示例:fuser(1)、fetchmail(1)。

追加,如 tar(1)。这通常与 -d 配对用于删除。

-b 缓冲区或块大小(带参数)。设置临界缓冲区大小,或(在与归档或管理存储有关的程序中 媒体)设置块大小。示例:du(1)、df(1)、tar(1)。

批处理。如果程序是自然交互的,-b 可用于 禁止提示或设置其他适合接受输入的选项 来自文件而不是人工操作员。示例:flex(1)。

-c 命令(带参数)。如果程序是一个通常从标准输入中获取命令的解释器,那么预计 -c 参数的选项将作为单行传递给它 输入。这种约定对于 shell 和 类似shell的解释器。示例:sh(1)、ash(1)、bsh(1)、ksh(1)、 蟒蛇(1)。比较下面的 -e。

检查(不带参数)。检查文件的正确性 命令的参数,但实际上并没有正常执行 加工。经常被程序用作语法检查选项 解释命令文件。示例:getty(1)、perl(1)。

在http://catb.org/~esr/writings/taoup/html/ch10s05.html查看完整列表

【讨论】:

【参考方案3】:

Linux/GNU 命令行界面遵循 POSIX 标准。 GNU 在其标准中指出了这一点:http://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html。

命令行语法也是单一 Unix 规范的一部分,尽管 --long-options 是 GNU 创新 IIRC。

请看这里:http://pubs.opengroup.org/onlinepubs/7908799/xbd/utilconv.html

但是,是的,这个标准是作为 getopt 实现的。

【讨论】:

【参考方案4】:

线程的快速摘要:

您的 CLI 应在缺少或不正确的参数时显示帮助以及错误消息(如果有)。

您应该将- 用于单个字母标志或选项,将-- 用于长选项,例如-a--all

所有程序都应支持两个标准选项:-v --version-h --help

-h--help => 给出使用信息并退出 -v--version => 显示程序版本并退出

请参阅此答案 https://***.com/a/8957246 上提供的链接(IEEE 和 GNU getopt)

【讨论】:

【参考方案5】:

Unix : 单破折号 -

BSD:没有破折号

GNU : 双破折号 --

【讨论】:

你能引用资源吗?看起来像 GNU adds long versions to Posix options(假设你的意思是“Unix”),但也允许只有一个连字符的单字母选项。 由于某些原因,我无法共享实际资源,但我读过这是一个约定。并不是说不能在其他任何地方互换使用,这只是一种风格。

以上是关于Linux 命令行开关和参数是不是有标准? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Day03-Linux常用命令

Linux命令之将标准输入转为命令行参数xargs

Powershell:如何实现标准开关?

命令行参数 - 和 -- 的区别

如何检查 smtp 是不是从命令行(Linux)工作 [关闭]

crontab 是不是接受命令行参数? [关闭]