3 votes

Qu'est-ce que ./ dans BASH ?

Je jouais dans un Shell et j'ai tapé ./. J'ai obtenu la sortie suivante :

bash: ./: Is a directory

Il semble que "./" vérifie si un répertoire avec le nom donné existe. J'ai essayé de trouver de la documentation à ce sujet pour voir si j'avais bien compris, mais je n'ai rien trouvé en ligne. Quelqu'un peut-il m'expliquer ce point ?

8voto

slhck Points 209720

Il est peu probable que l'on trouve une définition générale de cette notion dans le manuel de Bash. la spécification POSIX (section Résolution des noms de chemin) :

Le point spécial de nom de fichier fait référence au répertoire spécifié par son prédécesseur.

Quel est le prédécesseur si nous n'avons que des . ? J'ai mis l'accent sur la partie importante :

Si le nom de chemin ne commence pas par une barre oblique, le prédécesseur du premier nom de fichier du nom de chemin est considéré comme étant le répertoire de travail actuel du processus

En outre,

Un nom de chemin d'accès qui contient au moins un caractère autre qu'une barre oblique et qui se termine par une ou plusieurs barres obliques est résolu comme si un seul point ('.') était ajouté au nom de chemin d'accès.

Ainsi, lorsque vous tapez ./ il est résolu comme suit ./. qui pointe essentiellement vers votre répertoire de travail actuel. Lorsque vous tapez quelque chose dans votre Shell et que vous appuyez sur Enter Le Shell essaiera d'exécuter la première partie comme une commande. (En gros, la première série de caractères jusqu'au premier espace blanc).

Il n'existe pas de commande ou de fichier exécutable appelé ./. Il échouera donc et vous dira que ./ "est un répertoire". Intéressant, . est une commande (il s'agit d'une fonction intégrée que l'on trouve également sous le nom de source ), de sorte que lorsque vous tapez simplement . vous obtiendrez : bash: .: filename argument required .

3voto

Unnati Gutpa Points 11

Comme d'autres l'ont écrit, ./ est le nom du répertoire actuel. Lorsque vous avez tapé ./ à l'invite de bash et appuyez sur Entrée, vous avez tenté d'exécuter le répertoire courant en tant que commande, ce qui a bien sûr échoué, et bash vous a envoyé le message suivant (paraphrasé) : "Je ne peux pas faire ça. ./ est un répertoire et je ne peux pas exécuter des répertoires en tant que commandes".

2voto

Deyan Points 1

Les . implique le répertoire actuel. Vous utilisez ./ comme préfixe pour tous les fichiers du répertoire actuel.

De même, .. implique le répertoire précédent (supérieur). Il est souvent utilisé pour accéder à un répertoire de niveau supérieur, par exemple cd ../../../

Étant donné un système de fichiers avec le contenu :

# Comments start with a hash and aren't parsed
/                    # root directory
/foo/                # first level directory
/foo/bar/            # second level directory
/foo/bar/baz         # third level directory
/foo/bar/baz/qux     # a file in the third level directory

Si vous êtes dans le directeur de troisième niveau (baz) et que vous exécutez la commande ls vous verrez qux . Si vous exécutez ls . vous obtenez le même résultat, de même que si vous exécutez ls ./ .

Si vous êtes dans le directeur de troisième niveau (baz) et que vous exécutez la commande ls .. y ls ../ tous deux vous donnent baz . C'est-à-dire le contenu du répertoire situé un niveau plus haut.

1voto

porto alet Points 315

Sous Linux, ./ désigne le répertoire courant (et ../ le répertoire parent).

Si vous effectuez un ls -a, vous verrez que . et .. sont listés comme des répertoires (vous avez besoin du -a parce que . représente un répertoire caché).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X