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 命令行开关和参数是不是有标准? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章