web-dev-qa-db-fra.com

Comment fonctionne ~ /?

Dans le terminal, l’un des moyens de faire référence à home est d’utiliser ~/. Je ne comprends pas comment cela fonctionne, car le résultat de file ~/ est:

/home/admin/: directory

et en exécutant simplement ~/, vous obtenez:

-bash: /home/admin/: Is a directory

alors, qu'est-ce qui convertit ~/ en /home/admin?

~/ semble également fonctionner dans /bin/dash, donc je sais aussi que ce n'est pas spécifique à Bash.

10
NerdOfLinux

C'est expansion du tilde .

Le développement de tilde est requis par POSIX (voyez cela première page liée ) et apparaît dans tous les modernes shells de type Bourne . Cela inclut les shells populaires bashname__, ksh93 et zshname__, mais également des shells plus minimalistes tels que mkshname__, dashet busybox ash.

En pratique, différents shells compatibles POSIX diffèrent parfois par les détails précis de l'expansion du tilde, à la fois dans le cas non spécifié où HOMEserait utilisé mais non défini ou vide, et pour permettre l'utilisation de la notation ~ à d'autres fins que l'extension du domicile des utilisateurs. des répertoires. Par exemple, extension de tilde dans bashname __ fournit également un raccourci pour accéder aux valeurs des variables PWDet OLDPWDname__, avec ~- et ~+, respectivement.

Cependant, dans les cas typiques, cela fonctionne à peu près de la même manière pour les obus à la Bourne. Ce sont des cas typiques (mais notez que cette façon de les séparer n’est pas officielle, c’est juste ma façon de présenter le matériel):

  • ~ ou ~/ se développe tout seul dans votre répertoire personnel.
  • ~/ suivi de plusieurs composants de chemin se développe en chemin à partir de votre répertoire personnel.
  • ~username ou ~username/ se développe tout seul vers le répertoire de base de l'utilisateur dont le nom d'utilisateur est usernamename__.
  • ~username/ suivi de plusieurs composants de chemin se développe en chemin à partir du répertoire de base de l'utilisateur dont le nom d'utilisateur est usernamename__.
15
Eliah Kagan

~ est 'en abrégé' pour $HOME

~ est un moyen abrégé d'écrire $HOME, autrement dit votre répertoire personnel. Cela fonctionne dans les shells (par exemple, bash) et est appelé 'extension de tilde'.

Si vous ajoutez une barre oblique finale, cela signifie que vous parlez d'un répertoire.

Exemples:

$ ls -d ~/
/home/sudodus/
$ ls -d ~
/home/sudodus
$ ls -d $HOME
/home/sudodus

$ Sudo -i
[Sudo] lösenord för sudodus: 
# ls -d ~/
/root/
# ls -d ~
/root
# exit
logout

$ ls xournal.png
xournal.png

$ LANG=C ls xournal.png/
ls: cannot access 'xournal.png/': Not a directory
5
sudodus