Lorsque j'affiche le manuel de la pwd
commande, il indique que les options longues comme --physical
sont prises en charge
$ 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
Cependant, il échoue lorsque je tape ce qui suit
$ pwd --physical
-bash: pwd: --: invalid option
pwd: usage: pwd [-LP]
Pourquoi les options longues ne fonctionnent-elles pas pour moi?
J'utilise RHEL 6.4. Aucun alias pour pwd n'est configuré. On dirait que c'est la traction avant standard:
$ which pwd
/bin/pwd
type
au lieu dewhich
, carwhich
ne montre que les commandes, tandis que lestype
mots clés, les commandes intégrées, les alias, les fonctions et les commandes (et les chemins de commande hachés). Pour plus de détails, voir Pourquoi ne pas utiliser «lequel»? Que faut-il utiliser alors?man pwd
a la note suivante: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 supports
au bas de laDESCRIPTION
section.Réponses:
bash
a une commande intégréepwd
qui est ce que vous utilisez lorsque vous tapez simplementpwd
dans votre shell.Pour obtenir le
pwd
comme décrit par la page de manuel, vous devez forcer l'utilisation de la commande externe. Vous pouvez le faire en spécifiant le chemin d'accès complet à l'exécutable (/bin/pwd
dans votre cas) ou en ajoutantenv
avant la ligne :,env pwd
qui démarre laenv
commande qui peut être utilisée pour ajouter des paramètres à l'environnement (mais qui ne se fait pas ici), puisenv
démarre la commande spécifiée. Comme ilenv
n'a pas de fonction intégréepwd
, le "vrai"/bin/pwd
est exécuté.L'avantage du
pwd
bash intégré est qu'ilbash
garde la trace du répertoire actuel, donc obtenir la valeur est à un coût nul, tandis que la commande externe doit rechercher à travers le système de fichiers pour déterminer le chemin, ce qui est beaucoup plus intensif en E / S.la source
enable -n pwd
getcwd()
appel système, le noyau traverse toujours le système de fichiers, ce qui est plus facile à faire dans l'espace du noyau en raison de l'accès aux structures de données pertinentes, comme l'indique la réponse liée: "Cependant, notez que même sur FreeBSD et les autres systèmes, le noyau ne garde pas la trace du répertoire de travail avec une chaîne. "Cette page de manuel documente
/bin/pwd
, mais lorsque vous exécutez,pwd
vous utilisez le shell intégré; voir la sortie deLa fonction intégrée de votre shell
pwd
ne prend pas en charge les options longues (consultez la documentation de votre shell; puisque vous utilisez Bash, vous enhelp pwd
trouverez un résumé).la source