Perché pwd non accetta opzioni lunghe come --physical?


11

Quando visualizzo il manuale per il pwdcomando, dice che --physicalsono supportate opzioni lunghe come

$ man pwd
PWD(1)                           User Commands                          PWD(1)

NAME
       pwd - print name of current/working directory

SYNOPSIS
       pwd [OPTION]...

DESCRIPTION
       Print the full filename of the current working directory.

       -L, --logical
              use PWD from environment, even if it contains symlinks

       -P, --physical
              avoid all symlinks

Tuttavia, non riesce quando si digita quanto segue

$ pwd --physical
-bash: pwd: --: invalid option
pwd: usage: pwd [-LP]

Perché le opzioni lunghe non funzionano per me?

Sto usando RHEL 6.4. Nessun alias per pwd è configurato. Sembra che sia standard pwd:

$ which pwd
/bin/pwd

1
La pagina di manuale è per un'utilità autonoma che non fa parte di bash.
Thomas Dickey,

7
Utilizzare typeinvece di which, poiché whichmostra solo i comandi, mentre typemostra parole chiave, builtin, alias, funzioni e comandi (e percorsi dei comandi con hash). Per maggiori dettagli vedi Perché non usare "quale"? Cosa usare allora?
wjandrea,

1
Nel mio sistema man pwdha la seguente nota: your shell may have its own version of pwd, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supportsin fondo alla DESCRIPTIONsezione.
Nykakin,

Risposte:


26

bashha un comando integrato pwdche è quello che stai usando quando digiti semplicemente pwdnella tua shell.

Per ottenere pwdcome descritto dalla manpage, è necessario forzare l'uso del comando esterno. Puoi farlo specificando il percorso completo dell'eseguibile ( /bin/pwdnel tuo caso) o anteponendo envprima della riga :, env pwdche avvia il envcomando che può essere utilizzato per aggiungere impostazioni all'ambiente (ma che non viene fatto qui) e quindi envinizia il comando specificato. Poiché envnon ha un builtin pwd, il "reale" /bin/pwdviene eseguito.

Il vantaggio del builtin pwdin bash è che bashtiene traccia della directory corrente, quindi ottenere il valore è a costo zero, mentre il comando esterno deve cercare nel filesystem per determinare il percorso, che è molto più intenso di I / O.


4
Non è così che funziona il comando esterno. unix.stackexchange.com/a/413225/5132
JdeBP

A proposito: puoi anche disabilitare la shell incorporata (almeno in bash) dienable -n pwd
derobert

@JdeBP Era l'ultima volta che ho guardato (molto tempo fa :-)); e mentre ora usa la getcwd()chiamata di sistema, il kernel attraversa ancora il filesystem, che è più facile da fare nello spazio del kernel a causa dell'accesso a strutture di dati rilevanti, come afferma la risposta collegata: "Tuttavia, nota che anche su FreeBSD e altri sistemi il kernel non tiene traccia della directory di lavoro con una stringa. "
Wurtel,

11

Quella manpage documenta /bin/pwd, ma quando esegui pwdstai usando la shell integrata; vedere l'output di

type pwd

L'integrato della shell pwdnon supporta opzioni lunghe (consultare la documentazione della shell; poiché si utilizza Bash, help pwdverrà fornito un riepilogo).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.