9 votes

Pourquoi ./ est-il nécessaire pour exécuter un fichier exécutable?

Je suis sous ubuntu et je remarque que beaucoup de mes scripts exécutables ne fonctionnent pas sauf si je les précède de ./.

Par exemple, si j'ai un script perl : /home/me/script.pl et que je me trouve actuellement dans /home/me, en tapant script.pl ça ne marchera pas, mais en tapant ./script.pl ça fonctionnera.

Pourquoi est-ce ainsi?

21voto

Matt Greer Points 318

Parce que le répertoire actuel n'est pas dans votre chemin. Il s'agit d'une mesure de sécurité. S'il était dans votre chemin, quelqu'un pourrait potentiellement déposer une copie malveillante d'une commande commune, et lorsque vous êtes dans ce répertoire au lieu d'exécuter le vrai sudo, par exemple, vous exécuteriez le faux. Ce serait une mauvaise chose.

13voto

spinodal Points 2092

Pour exécuter un script, vous devez taper le chemin complet du script à moins que le script ne soit présent dans l'un des répertoires répertoriés dans votre variable d'environnement $PATH. Généralement (et par défaut) . (le répertoire actuel) n'est pas dans votre $PATH, donc vous devez taper ./script pour l'exécuter.

4voto

echo $PATH

Vous devez avoir le répertoire actuel (un seul point) dans votre chemin d'accès pour que cela fonctionne.

Vous pouvez l'ajouter à votre chemin d'accès si vous le souhaitez avec les commandes suivantes.

sh/bash: export PATH=$PATH:.

tcsh/csh: set PATH = ($PATH .)

3voto

foxy Points 1690

Le shell recherche les exécutables dans le chemin spécifié, et par défaut ./ n'est pas dans le chemin.

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