例如,
[fakename]$ type echo
echo is a shell builtin
但是man echo
给了我 GNU coreutils 版本的echo
. 判断我正在查看的手册页是否正确的最简单方法是什么,即如果我直接调用它,我会得到实用程序的那个?
例如,
[fakename]$ type echo
echo is a shell builtin
但是man echo
给了我 GNU coreutils 版本的echo
. 判断我正在查看的手册页是否正确的最简单方法是什么,即如果我直接调用它,我会得到实用程序的那个?
你没有,真的。并非没有手册页之外的知识。
在
echo
(andprintf
, andtest
, ...) 的情况下,它通常是内置的 shell,因此您需要了解这一点并阅读 shell 的文档。 (并且echo
在不同的实现中是出了名的不同,请改用.printf
)在大多数(如果不是全部)shell 中,您可以找到某些东西是否是内置的 ,例如将打印。(由 POSIX 指定,但例如fish也支持它,因为它是非 POSIXy。)在 Bash 中,您将阅读在线文档,或使用内置命令(特定于 Bash,并且您需要知道存在)。
type command
type echo
echo is a shell builtin
type
man bash
help
即使该命令不是内置命令,也可能有多个具有相同名称的命令,这
rename
是一个著名的示例(请参阅为什么 Debian/Ubuntu 上的重命名实用程序与其他发行版(如 CentOS)上的不同?)。现在,您的操作系统应该为实际安装的实用程序提供正确的手册页,例如在 Debian 中,“替代”系统也会在命令替代项更改时更新相应的手册页。但是,如果您阅读在线手册页,则需要注意它。许多实用程序都有一个命令行选项
--version
,它可能会告诉您该命令是什么实现。(但并非几乎所有实用程序都有它。我认为它最初是一个 GNUism,所以 GNU 实用程序有它,以及那些碰巧复制自定义的。)在 的情况下rename
,它恰好可以区分两种不同的实现:除此之外,您的系统可能具有与实用程序同名的别名或函数,通常用于修改实用程序的行为。在这种情况下,手册页中显示的默认值可能不适用。for 的别名
ls
很常见,添加-i
到rm
or的别名也是如此mv
。但type foo
也会告诉你foo
是别名还是函数。如果您想要内置命令的手册,那么您需要查看 shell 的手册。该命令将与所有其他内置命令一起记录在其中(或者至少会提供对可以找到内置命令的文档的参考)。
bash
:man bash
或help echo
来自交互式bash
外壳。zsh
:(man zsh
经过一番阅读,man zshbuiltin
)fish
:(man fish
经过一番阅读,help echo
)您获得的
man echo
文档手册/bin/echo
,即外部echo
命令。echo
当您在没有明确路径的情况下使用此命令时,您将不会使用此命令。应该可以通过提供完整路径(您可以使用 获取)来调用非 shell 内部版本
which echo
。shell 内部没有单独的联机帮助页;有关您想要查找 shell 手册页的文档。您上面提到的“类型”命令是确定您将获得的最佳方式。由于您要获取信息的命令是内置的 shell,因此输入
help <command name>
相同的 shell 将为您提供正确的帮助条目:或者,您可以键入
man bash
(或您正在使用的任何 shell)并找到您正在寻找的内置函数。不幸的是,没有简单的方法来验证手册页是否完全匹配您要运行的命令。获得“正确”的页面比看起来要棘手,因为这将取决于许多因素,例如命令的完整路径、环境变量和别名,而且在技术上不可能
man
考虑所有这些因素。但是,不久之后,您应该大致了解在哪里寻求帮助。如果我要描述一个在大多数现代 *nice 上获取正确文档的通用算法,它看起来像这样:
type <command>
说它是内置的)?help <command>
orman <shellname>
如果help
在您的 shell 中不可用。man <command>
(或者man <section> <command>
如果不同部分中有多个条目,请参阅man man
部分列表)info <command>
/usr/share/doc/<package name>
包上的其他文档,例如 HTML 页面。-h
使用or选项运行命令--help
,假设该命令是可信的。这通常会简要总结它的作用,并告诉您在哪里可以找到更多信息。但我必须重申,随着人们花一些时间在操作系统上,这一切都会变得“自然”。
man
分为以下部分:根据您要查找的内容,您可以
man
这样调用以避免混淆:man section command
.有关更多信息,您可以实际使用
man man
如果您的操作系统发行版没有提到这些差异的程序的手册页,您应该报告错误。
事实上,这是发行版创建者的任务,但如果您键入:
你会得到输出是否
cmdname
是内置的shell。如果你知道你正在使用什么 shell,你可以运行:替换
shellname
为您的 shell 的名称。shell 的手册页应该包含有关内置命令的信息。让我举一个用户友好的 UNIX 应该如何记录这个的例子: http: //schillix.sourceforge.net/man/man1/test.1.html