我如何知道我正在查看的手冊頁是否正確?
例如,
[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
,它恰好可以區分兩種不同的實現:debian$ rename --version /usr/bin/rename using File::Rename version 0.20 centos$ rename --version rename (util-linux-ng 2.17.2)
除此之外,您的系統可能具有與實用程序同名的別名或函式,通常用於修改實用程序的行為。在這種情況下,手冊頁中顯示的預設值可能不適用。for 的別名
ls
很常見,添加-i
到rm
or的別名也是如此mv
。但type foo
也會告訴你foo
是別名還是函式。