web-dev-qa-db-fra.com

~ est $ maison, mais parfois?

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.

15
Explosion Pills

~ 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.

19
penguin359

~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.

17
Patrick

~ suivi d'un nom d'utilisateur se développe à cet annuaire de domicile de l'utilisateur.

5