为什么我的 ls --help 不起作用?

6 command-line osx

Marias-MacBook-Air:~ marias$ ls --help

ls: illegal option -- -

usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]
Run Code Online (Sandbox Code Playgroud)

Ste*_*itt 13

lsMac OS X 中的版本基于 BSD ls,不支持长格式选项,包括--help. 请参阅该ls手册页或man ls有关详细信息,您的系统上。

  • `--help` 需要由命令明确支持才能工作。你应该尝试 `man` 后跟你感兴趣的命令;这更有可能为您提供您在 Mac OS X 上想要的信息。 (6认同)

Sté*_*las 9

不同的命令支持不同的选项样式。主要趋势是:

  • getopt():getopt() 是一个有 30 年历史的用于解析选项的编程 API。它被广泛使用并且是唯一的 POSIX 标准。

    它只支持单字母选项,其中一些可以带参数。为简洁起见,可以将多个选项组合在一起。

    示例:tail -fn -2: 一个无参数选项 ( -f) 后-n跟它的参数为-2( 也可以写作tail -fn-2or tail -f -n -2)。--用于标记选项的结束。

  • XrmParseCommand():(80 年代)例如从XtOpenApplication().

    传统(现在阅读旧式)X11 应用程序使用的 API 。在那里,选项是单个参数,通常和传统上-option(或+option)。

    选项可以带参数,但不能像 for 那样组合getopt()(即使定义为单字母选项,如-dfor 的简写-display)。

  • GNU getopt_long。(80 年代后期)。GNU 扩展了getopt()API,以兼容的方式添加对长选项的支持。

    GNU 是这些--long选项的起源,也是它们在 GNU 系统上非常普遍而在其他地方并不常见的原因。

    在那里,您有两种选择:多头和空头。长的是--foo。那些带参数的可以写成--foo=arg或--foo arg。

    另一个扩展是可以选择接受参数(-o或-oarg,--opt或--opt=arg)的选项,尽管短变体不允许传递空参数。长选项也可以缩写。与 in 一样--help,您可以传递--heor --h(前提是它是唯一以 开头的选项h)。GNU 选项解析还允许交织选项和非选项参数(尽管--仍可用于标记选项的结束)。

    GNU 风格的选项现在正在成为一个新的事实上的标准,大多数语言都有一个 API 来解析它们(有时没有完整的功能集,有时有扩展)。

  • 狂野的西部:现在许多应用程序手动解析它们的选项,或者使用具有另一种语法的不太常见的库。除非他们寻求符合标准,否则没有什么能阻止他们做任何想做的事。当然,有些命令根本没有选项。

现在任何命令是否有任何选项来打印帮助或使用消息也完全由应用程序编写者决定。

许多应用程序将在未识别出选项时打印使用消息(对于采用选项的命令)。有些人可能会在-h, -?, -help, --help, --usage, --long-help...

现在,使用随机参数调用命令,不知道这可能会做什么是一件危险的事情。-h可能是寻求帮助或其他任何事情。例如shutdown -h是^ h中高音系统。-help将短于-h -e -l -p(或-h -e lp或-h elp如在--host=elp用于命令使用...)getopt()或getopt_long()...

如果你知道一个命令接受选项,一个相对安全的赌注是-?或-:。在外壳中:

cmd -\?
cmd -:
Run Code Online (Sandbox Code Playgroud)

对于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]
Run Code Online (Sandbox Code Playgroud)

不适用于每个命令。

无论如何,最好的办法是先尝试man,如前所述。

请注意,某些命令是 shell 内置命令(尝试type the-command查找),因此它们的文档将在您的 shell 手册中找到。

ls不过一般情况并非如此。