我如何知道我正在查看的手册页是否正确?

ext*_*xe5 6 man

例如,

[fakename]$ type echo
echo is a shell builtin
Run Code Online (Sandbox Code Playgroud)

但是man echo给了我 GNU coreutils 版本的echo. 判断我正在查看的手册页是否正确的最简单方法是什么,即如果我直接调用它,我会得到哪个实用程序?

ilk*_*chu 5

你不知道,真的。并非没有手册页之外的知识。

对于echo(and printf, and test, ...) 来说,它通常是 shell 内置的,因此您需要了解这一点并阅读 shell 的文档。 echo众所周知,在不同的实现中是不同的,请改用printf

在大多数(如果不是全部)shell 中,您可以使用 来查找某些内容是否是内置的 ,例如will print 。(由 POSIX 指定,但例如Fish也支持它,尽管它是非 POSIXy 的。)在 Bash 中,您可以阅读在线文档,或使用内置命令(这是 Bash 特有的,您需要该命令)知道存在)。type commandtype echoecho is a shell builtintypeman bashhelp

即使该命令不是内置命令,也可能有多个同名命令,这rename是一个著名的例子(请参阅为什么 Debian/Ubuntu 上的重命名实用程序与其他发行版(如 CentOS)上的重命名实用程序不同?)。现在,您的操作系统应该具有实际安装的实用程序的正确手册页,例如在 Debian 中,当命令替代项更改时,“替代项”系统也会更新相应的手册页。但如果您阅读在线手册页,您就需要了解这一点。

许多实用程序都有一个命令行选项,--version它可能会告诉您该命令是什么实现。(但并非几乎所有实用程序都有它。我认为它最初是 GNUism,所以 GNU 实用程序以及那些碰巧复制自定义的实用程序都有它。)在 的情况下,rename它恰好可以区分两种不同的实现:

debian$ rename --version
/usr/bin/rename using File::Rename version 0.20
centos$ rename --version
rename (util-linux-ng 2.17.2)
Run Code Online (Sandbox Code Playgroud)

除此之外,您的系统可能有一个与实用程序同名的别名或函数,通常用于修改实用程序的行为。在这种情况下,手册页中提供的默认值可能不适用。的别名很常见,添加到或 的ls别名也很常见。但也会告诉您是否是别名或函数。-irmmvtype foofoo

  • shell 内置命令不支持 `--version` 选项。 (2认同)
  • @GAD3R,是的,BSD 上的标准实用程序或许多其他工具也没有。对于 shell 内置程序,这当然不是必需的,因为它是适用的 shell 版本,所以只需检查 `$BASH_VERSION` 如果是 Bash...对于其他实用程序,您需要知道它们是否支持该选项,您可以选择从手册页中找到,引导我们回到最初的问题。:D (2认同)

归档时间:

查看次数:

256 次

最近记录:

7 年,1 月 前