Zum Beispiel
[fakename]$ type echo
echo is a shell builtin
Aber man echo
gibt mir die GNU Coreutils-Version von echo
. Wie kann ich am einfachsten feststellen, ob die Manpage, die ich mir anschaue, die richtige ist, d. h. die für das Dienstprogramm, das ich erhalten würde, wenn ich es direkt aufrufen würde?
Akzeptierte Antwort:
Wirklich nicht. Nicht ohne Kenntnisse außerhalb der Manpage.
Im Fall von echo
(und printf
, und test
, …), es ist oft eine eingebaute Shell, also müssen Sie das wissen und die Dokumentation der Shell lesen. (Und echo
in verschiedenen Implementierungen notorisch unterschiedlich ist, verwenden Sie printf
stattdessen.)
In den meisten, wenn nicht allen Shells, können Sie mit type command
, z.B. type echo
gibt echo is a shell builtin
aus . (type
wird von POSIX angegeben, aber z.B. fish unterstützt es auch, so nicht-POSIXy es auch ist.) In Bash würden Sie dann man bash
lesen , die Online-Dokumentation oder verwenden Sie den eingebauten Befehl help
(das spezifisch für Bash ist und von dem Sie wissen müssen, dass es existiert).
Auch wenn der Befehl nicht ist ein eingebautes, es ist möglich, dass es mehrere Befehle mit demselben Namen gibt, rename
Dies ist ein berühmtes Beispiel (siehe Warum unterscheidet sich das Umbenennungsdienstprogramm auf Debian/Ubuntu von dem auf anderen Distributionen wie CentOS?). Jetzt sollte Ihr Betriebssystem die richtige Manpage für das tatsächlich installierte Dienstprogramm haben, und z. in Debian aktualisiert das „alternatives“-System die entsprechenden Manpages auch dann, wenn die Befehlsalternativen geändert werden. Aber wenn Sie eine Online-Manpage lesen, müssen Sie sich dessen bewusst sein.
Viele Dienstprogramme haben eine Befehlszeilenoption wie --version
was Ihnen sagen könnte, welche Implementierung dieser Befehl ist. (Aber nicht fast alle Dienstprogramme haben es. Ich denke, es ist ursprünglich ein GNUismus, also haben es GNU-Dienstprogramme, ebenso wie diejenigen, die zufällig die Gewohnheit kopiert haben.) Im Fall von rename
, funktioniert es zufällig, indem es zwei verschiedene Implementierungen auseinanderhält:
debian$ rename --version
/usr/bin/rename using File::Rename version 0.20
centos$ rename --version
rename (util-linux-ng 2.17.2)
Außerdem könnte Ihr System einen Alias oder eine Funktion mit dem gleichen Namen wie ein Dienstprogramm haben, normalerweise um das Verhalten des Dienstprogramms zu ändern. In diesem Fall gelten die in einer Manpage angezeigten Standardwerte möglicherweise nicht. Aliase für ls
sind üblich, ebenso wie Aliase, die -i
hinzufügen zu rm
oder mv
. Aber type foo
würde Ihnen auch sagen, ob foo
ist ein Alias oder eine Funktion.