例如,
[fakename]$ type echo
echo is a shell builtin
但man echo
给了我 GNU coreutils 版本的echo
.判断我正在查看的手册页是否正确(即如果我直接调用它就会得到的实用程序)的最简单方法是什么?
答案1
你不知道,真的。并非没有手册页之外的知识。
对于echo
(and printf
, and test
, ...) 来说,它通常是 shell 内置的,因此您需要了解这一点并阅读 shell 的文档。
(而且echo
在不同的实现中是众所周知的不同,改用printf
.)
在大多数(如果不是全部)shell 中,您可以使用 来查找某些内容是否是内置的 ,例如will print 。 (type command
type echo
echo is a shell builtin
type
由 POSIX 指定但是例如鱼也支持它,尽管它是非 POSIXy 的。)在 Bash 中,你会读到man bash
,在线文档,或使用内置命令help
(这是 Bash 特有的,您需要知道它的存在)。
即使命令是不是一个内置命令,可能有多个同名命令,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)
除此之外,您的系统可能有一个与实用程序同名的别名或函数,通常用于修改实用程序的行为。在这种情况下,手册页中提供的默认值可能不适用。的别名很常见,添加到或 的ls
别名也很常见。但也会告诉您是否是别名或函数。-i
rm
mv
type foo
foo
答案2
如果您想要内置命令的手册,那么您需要查看 shell 的手册。该命令将与所有其他内置命令一起记录在其中(或者至少会提供对内置命令文档所在位置的引用)。
bash
:man bash
或help echo
从交互式bash
shell 中。zsh
:(man zsh
读了一会儿之后,man zshbuiltin
)fish
:(man fish
读了一会儿之后,help echo
)
您获得的man echo
文档手册/bin/echo
,即外部的 echo
命令。当您echo
在没有显式路径的情况下使用时,不会使用此命令。
答案3
应该可以通过提供完整路径(您可以使用 获得which echo
)来调用非 shell 内部版本。 shell 内部没有单独的联机帮助页;有关这些内容的文档,您需要查找 shell 的联机帮助页。您上面提到的“type”命令是确定您将获得的内容的最佳方法。
答案4
man
分为以下部分:
- 一般部分
- 系统调用
- 库函数
- 文件格式
- 游戏和屏保
- 各种各样的
- 系统管理
根据您要查找的内容,您可以man
像这样调用以避免混淆:man section command
。
有关更多信息,您可以实际使用man man