Man

我如何知道我正在查看的手冊頁是否正確?

  • August 5, 2018

例如,

[fakename]$ type echo
echo is a shell builtin

但是man echo給了我 GNU coreutils 版本的echo. 判斷我正在查看的手冊頁是否正確的最簡單方法是什麼,即如果我直接呼叫它,我會得到實用程序的那個?

你沒有,真的。並非沒有手冊頁之外的知識。

echo(and printf, and test, …) 的情況下,它通常是內置的 shell,因此您需要了解這一點並閱讀 shell 的文件。 (並且echo在不同的實現中是出了名的不同,請改用.printf

在大多數(如果不是全部)shell 中,您可以找到某些東西是否是內置的 ,例如將列印。(由 POSIX 指定,但例如fish也支持它,因為它是非 POSIXy。)在 Bash 中,您將閱讀線上文件,或使用內置命令(特定於 Bash,並且您需要知道存在)。type *command*``type echo``echo 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)

除此之外,您的系統可能具有與實用程序同名的別名或函式,通常用於修改實用程序的行為。在這種情況下,手冊頁中顯示的預設值可能不適用。for 的別名ls很常見,添加-irmor的別名也是如此mv。但type foo也會告訴你foo是別名還是函式。

引用自:https://unix.stackexchange.com/questions/460567