![为什么我的 ls --help 不起作用?](https://linux22.com/image/66195/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%20ls%20--help%20%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
Marias-MacBook-Air:~ marias$ ls --help
ls: illegal option -- -
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]
答案1
Mac OS X 中的版本ls
基于 BSD ls
,不支持包括--help
.看联机ls
帮助页或man ls
在您的系统上了解详细信息。
答案2
不同的命令支持不同的选项样式。主要趋势是:
getopt()
:getopt() 是一个有 30 年历史的用于解析选项的编程 API。它被广泛使用,并且是唯一的 POSIX 标准。它仅支持单字母选项,其中一些可以带参数。为了简洁起见,可以将多个选项组合在一起。
示例:
tail -fn -2
:无参数选项 (-f
) 后跟-n
带有参数-2
(也可以写为tail -fn-2
或tail -f -n -2
)。--
用于标记选项的结束。XrmParseCommand()
:(80 年代)例如从 调用XtOpenApplication()
。传统使用的API(阅读老式如今)X11 应用程序。在那里,选项是单个参数,通常是传统上的
-option
(或+option
)。选项可以接受参数,但不能像 for 那样组合
getopt()
(即使定义为单字母选项,例如-d
for 的缩写-display
)。
GNU
getopt_long
。 (80年代末)。 GNU 扩展了getopt()
API,以兼容的方式添加对长选项的支持。GNU 是这些选项的起源
--long
,也是它们在 GNU 系统上非常常见而不是在其他地方如此普遍的原因。在那里,您有两种类型的选择:多头和空头。长的是
--foo
。那些接受参数的可以写成--foo=arg
或--foo
arg
。另一个扩展是可以选择接受参数(
-o
or-oarg
、--opt
or--opt=arg
)的选项,尽管短变体不允许传递空参数。长选项也可以缩写。与 一样--help
,您可以传递--he
or--h
(前提是它是唯一以 开头的选项h
)。 GNU 选项解析还允许选项和非选项参数交织在一起(尽管--
仍然可以用来标记选项的结尾)。GNU 风格的选项现在正在成为一种新的事实上的标准,大多数语言都有一个 API 来解析它们(有时没有完整的功能集,有时带有扩展)。
- 狂野西部:现在许多应用程序手动解析其选项,或者使用具有另一种语法的不太常见的库。除非他们寻求遵守标准,否则没有什么可以阻止他们做他们想做的事。当然,有些命令根本不接受选项。
现在,任何命令是否有打印帮助或使用消息的选项也完全由应用程序编写者自行决定。
许多应用程序会打印用法无法识别选项时的消息(对于那些带有选项的命令)。有些可能会在、、、、...上打印一条消息-h
。-?
-help
--help
--usage
--long-help
现在,使用随机参数调用命令而不知道它会做什么是一件危险的事情。-h
可能是为了帮助或其他任何东西。例如shutdown -h
是H改变系统。对于使用or ...的命令,将是(or or as in ...)-help
的缩写-h -e -l -p
-h -e lp
-h elp
--host=elp
getopt()
getopt_long()
如果您知道命令接受选项,相对安全的选择是-?
or -:
。在外壳中:
cmd -\?
cmd -:
对于getopt()
API,:
和?
具有特殊含义,因此不太可能是有效选项。然后,您会收到一条错误消息,该消息可能会提示您获得帮助的有效选项(如果有)。
$ xterm -:
xterm: bad command line option "-:"
usage: xterm [-/+132] [-C] [-Sccn] [-T string] [-/+ah] [-/+ai] [-/+aw]
[...]
Type xterm -help for a full description.
$ dd -:
dd: invalid option -- ':'
Try 'dd --help' for more information.
$ ls -:
ls: illegal option -- :
usage: ls -1RadCxmnlogrtucpFbqisfL [files]
不适用于每个命令。
无论如何,您最好的选择是man
首先尝试,正如已经提到的那样。
请注意,某些命令是 shell 内置命令(尝试type the-command
找出),因此它们的文档可以在 shell 手册中找到。
但一般情况并非如此ls
。