cD ~
fait la même chose que
cd $HOME
qui est aussi le même que
cd /home/tandu
Cependant,
cd ~not-tandu
changements à /home/not-tandu
Est-ce purement un choix syntaxique? Comment cela est-il traité par le noyau (ou le cd
exécutable?) Existe-t-il un cas particulier pour ~
Pour ajouter la barre oblique si tout le reste est omis? C'est-à-dire, ~/
et ~
Modification du même répertoire, mais ~a
est un répertoire. On ne peut pas en dire autant pour aucun autre répertoire que vous modifiez.
~
est un alias pour $HOME
fourni par un certain nombre de coquilles, mais $HOME
est plus universel. $HOME
demande réellement à la coquille d'insérer (substitut) la variable environnementale à la maison ici. Il existe de nombreuses variables environnementales différentes pouvant être substituées, essayez d'exécuter env
pour une liste. Noter que ~
n'est pas toujours reconnu quand ce n'est pas au début d'un mot. Essayez ces deux commandes de comparaison:
ls /~
ls /$HOME
Le premier est transmis au LS exécutable comme /~
qui essaie ensuite de regarder un fichier appelé ~
Dans le répertoire racine, la seconde expande $HOME
et devient //home/user
qui est ensuite transmis à la LS exécutable en tant qu'argument de ligne de commande. Tous les systèmes POSIX (POSIX correspond à la norme pour la manière dont les systèmes UNIX et Linux fonctionnent) permettent de traiter de multiples barres à éruption cutanée identiques à une barre oblique si //home/user
est la même chose que dire /home/user
. ~username
est un raccourci pour dire à la coquille de rechercher le nom d'utilisateur dans le fichier PasswD et de renvoyer leur répertoire personnel. Il n'y a pas de variable d'environnement équivalent. Toutes ces substitutions sont effectuées par la coque et sont soutenues par la plupart d'entre elles, mais seules des variables d'environnement comme $HOME
sont garantis pour être pris en charge par tous les coques. En outre, cd
est en fait une commande intégrée. C'est une directive spéciale qui indique à la coquille elle-même de changer de répertoires. Ce n'est pas comme si les autres intégrés de shell pouvant être mis en œuvre comme exécutable distinct comme echo
est dû au fait qu'il est utilisé pour modifier un attribut fondamental du processus Shell. echo
est simplement une coquille intégrée pour des raisons de performance, mais dans le bon vieux temps d'UNIX, n'était disponible que car sa propre exécutable /bin/echo
.
~foo
signifie "Le répertoire domestique de l'utilisateur foo".
Cela n'est pas fait par le noyau, il est interprété par la coquille. Chaque fois que la coque voit ~foo
En tant qu'argument, il le remplace de manière transparente avec le répertoire domestique de l'utilisateur foo
et passe à sa place. Alors, quand vous courez cd ~tandu
, la coquille est en train de courir cd /home/tandu
.
~
suivi d'un nom d'utilisateur se développe à cet annuaire de domicile de l'utilisateur.