Například,
[fakename]$ type echo
echo is a shell builtin
Ale man echo
mi dává GNU coreutils verzi echo
. Jaký je nejjednodušší způsob, jak zjistit, zda je manuálová stránka, na kterou se dívám, správná, tj. ta pro nástroj, který bych získal, kdybych jej přímo vyvolal?
Přijatá odpověď:
Ty ne, opravdu. Ne bez znalostí mimo manuálovou stránku.
V případě echo
(a printf
a test
, …), je to často vestavěný shell, takže to musíte vědět a přečíst si dokumentaci shellu. (A echo
se notoricky liší v různých implementacích, použijte printf
místo toho.)
Ve většině, ne-li ve všech shellech, můžete zjistit, zda je něco vestavěné pomocí type command
, např. type echo
vypíše echo is a shell builtin
. (type
je specifikováno POSIX, ale např. fish to také podporuje, i když to není POSIXy.) V Bash byste pak četli man bash
, online dokumentaci nebo použijte vestavěný příkaz help
(který je specifický pro Bash a o kterém musíte vědět, že existuje).
I když příkaz není vestavěný, je možné, že existuje několik příkazů se stejným názvem, rename
je slavný příklad (viz Proč je nástroj pro přejmenování na Debian/Ubuntu jiný než na jiných distribucích, jako je CentOS?). Nyní by váš operační systém měl mít správnou manuálovou stránku pro aktuálně nainstalovaný nástroj, a např. v Debianu systém „alternativy“ aktualizuje odpovídající manuálové stránky také při změně alternativ příkazů. Ale pokud čtete online manuálovou stránku, musíte si toho být vědomi.
Mnoho nástrojů má možnost příkazového řádku jako --version
což by vám mohlo říct, jaká implementace tento příkaz je. (Ale ne téměř všechny nástroje to mají. Myslím, že je to původně GNUismus, takže GNU nástroje to mají, stejně jako ty, které náhodou zkopírovaly vlastní.) V případě rename
, náhodou to funguje při rozlišování dvou různých implementací:
debian$ rename --version
/usr/bin/rename using File::Rename version 0.20
centos$ rename --version
rename (util-linux-ng 2.17.2)
Kromě toho může mít váš systém alias nebo funkci se stejným názvem nástroje, obvykle za účelem úpravy chování nástroje. V takovém případě nemusí platit výchozí hodnoty uvedené v manuálové stránce. Aliasy pro ls
jsou běžné, stejně jako aliasy přidávající -i
do rm
nebo mv
. Ale type foo
by vám také řekl, jestli foo
je alias nebo funkce.