Ad esempio,
[fakename]$ type echo
echo is a shell builtin
Ma man echo
mi dà la versione GNU coreutils di echo
. Qual è il modo più semplice per sapere se la pagina man che sto guardando è quella corretta, ovvero quella per l'utilità che otterrei se la invocassi direttamente?
Risposta accettata:
Non lo fai, davvero. Non senza conoscenze esterne alla pagina man.
Nel caso di echo
(e printf
e test
, …), è spesso una shell incorporata, quindi dovrai saperlo e leggere la documentazione della shell. (E echo
è notoriamente diverso nelle diverse implementazioni, usa printf
invece.)
Nella maggior parte, se non in tutte le shell, puoi scoprire se qualcosa è incorporato con type command
, per esempio. type echo
stamperà echo is a shell builtin
. (type
è specificato da POSIX ma ad es. anche fish lo supporta, per quanto non POSIXy com'è.) In Bash, dovresti quindi leggere man bash
, la documentazione in linea o utilizzare il comando integrato help
(che è specifico di Bash e che devi sapere che esiste).
Anche se il comando è non un builtin, è possibile che ci siano più comandi con lo stesso nome, rename
essendo un esempio famoso (vedi Perché l'utilità di ridenominazione su Debian/Ubuntu è diversa da quella su altre distribuzioni, come CentOS?). Ora, il tuo sistema operativo dovrebbe avere la pagina man corretta per l'utilità effettivamente installata, e ad es. in Debian, il sistema “alternative” aggiorna le pagine man corrispondenti anche quando vengono modificate le alternative di comando. Ma se leggi una pagina man online, devi esserne consapevole.
Molte utilità hanno un'opzione della riga di comando come --version
che potrebbe dirti quale implementazione è quel comando. (Ma non quasi tutte le utilità ce l'hanno. Penso che originariamente sia un GNUismo, quindi ce l'hanno le utilità GNU, così come quelle che hanno copiato la custom.) Nel caso di rename
, funziona distinguendo due diverse implementazioni:
debian$ rename --version
/usr/bin/rename using File::Rename version 0.20
centos$ rename --version
rename (util-linux-ng 2.17.2)
Oltre a ciò, il tuo sistema potrebbe avere un alias o una funzione con lo stesso nome di un'utilità, di solito per modificare il comportamento dell'utilità. In tal caso, le impostazioni predefinite presentate in una pagina man potrebbero non essere applicabili. Alias per ls
sono comuni, così come gli alias che aggiungono -i
a rm
o mv
. Ma type foo
ti direbbe anche se foo
è un alias o una funzione.