OVH Cloud OVH Cloud

Quel est l'intérêt de ./

7 réponses
Avatar
DF
Bonjour,

J'ai lu dans une doc Linux, de saisir: sh ./ le_nom_du_fichier_script
pour lancer un script.
Si j'ai bien compris la signification de l'expression ./ qui, me semble
t-il, veut dire "situé dans le répertoire courant", je ne vois pas
l'intérêt de mentionner cette expression. J'ai raté quelque chose ?
Merci d'avance
DF

7 réponses

Avatar
lhabert
DF :

J'ai lu dans une doc Linux, de saisir: sh ./ le_nom_du_fichier_script


Pas d'espace après le « ./ ».

pour lancer un script.
Si j'ai bien compris la signification de l'expression ./ qui, me semble
t-il, veut dire "situé dans le répertoire courant", je ne vois pas
l'intérêt de mentionner cette expression. J'ai raté quelque chose ?


Oui, dans ce cas ci, le « ./ » est complètement inutile. En fait, il sert
quand tu cherches à lancer directement un programme situé dans le répertoire
courant, et que le répertoire courant n'est pas dans la variable « PATH »
(qui indique la liste des répertoires dans lesquels le shell doit chercher
les programmes que tu lui demandes d'exécuter). Le shell ne va par défaut
pas chercher les programmes dans le répertoire courant (imagine qu'un petit
malin mette dans un répertoire à lui un programme nommé « ls », et que tu te
déplaces dans ce répertoire...), et il faut mettre explicitement un « ./ »
devant pour lui dire que si, tu veux vraiment qu'il le fasse.

Avatar
R12y
On Thu, 17 Nov 2005 23:52:30 +0100, DF wrote:

Bonjour,


Bonjour

J'ai lu dans une doc Linux, de saisir: sh ./ le_nom_du_fichier_script
pour lancer un script.
Si j'ai bien compris la signification de l'expression ./ qui, me semble
t-il, veut dire "situé dans le répertoire courant", je ne vois pas
l'intérêt de mentionner cette expression.


Quand tu veux lister le contenu d'un répertoire, tu fais:
$ ls
En vrai, tu a executé "/bin/ls".
Si tu enlève l'éxecutable du répertoire "/bin/", que tu le mets dans
"/usr/bin/" e que tu refais un
$ ls
alors tu aura lancé en vrai "/usr/bin/ls".
Idem su tu mets "ls" dans "/usr/local/bin".

Pourquoi et comment?
Fais
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/bin

Dans la variable d'environnement PATH il y a une liste de répertoire dans
lequel le systeme va chercher l'executable en question. Quand tu fais donc
un
$ nom_du_script

Le systeme cherchera dans cette liste et seulement dans cette liste. Si il
ne trouve rien, alors il abandonne.
Tu as aussi le choix d'ajouter ton $HOME à cette liste. Si tu sais ce que
tu fais, c'est une solution.

--
Rakotomandimby Mihamina,
http://aspo.rktmb.org/activites/infogerance
Serveurs* sous Debian, Fedora...
(*) Serveurs!?: http://fr.search.yahoo.com/search?p=serveurs+dedies

Avatar
manuel viet
In article <437d09ae$0$12751$, DF wrote:
Bonjour,

J'ai lu dans une doc Linux, de saisir: sh ./ le_nom_du_fichier_script
pour lancer un script.
Si j'ai bien compris la signification de l'expression ./ qui, me semble
t-il, veut dire "situé dans le répertoire courant", je ne vois pas
l'intérêt de mentionner cette expression. J'ai raté quelque chose ?


En général, on ne met pas . dans le PATH pour éviter d'être paresseux
car c'est une faille de sécurité (imagine que ton archive déplie une
version binaire de "quelque chose dont le nom existe déjà dans
/usr/bin" ; si . est dans le PATH, "quelque chose" sera exécuté à la
place du binaire installé, sans que l'utilisateur ne soit averti).
C'est particulièrement pernicieux dans le cas où "quelque chose" est
exécuté depuis un script, et c'est le comble de l'horreur si l'user
est root à ce moment là.

--
Manuel Viet * mailto:

Parce qu'un clavier d'ordinateur a au moins cent touches différentes,
adhérez à http://sms.informatiquefrance.com/

Avatar
TiChou
Dans le message <news:dlj242$j1c$,
*Luc Habert* tapota sur f.c.o.l.configuration :

DF :
J'ai lu dans une doc Linux, de saisir: sh ./ le_nom_du_fichier_script
pour lancer un script.
Si j'ai bien compris la signification de l'expression ./ qui, me semble
t-il, veut dire "situé dans le répertoire courant", je ne vois pas
l'intérêt de mentionner cette expression. J'ai raté quelque chose ?


Oui, dans ce cas ci, le « ./ » est complètement inutile.


Ou presque. Pour le plaisir, chipotons un peu :

$ sh -i
$ sh ./-i
Hello world !
$ file ./-i
./-i: Bourne shell script text executable

--
TiChou


Avatar
David
Le Thu, 17 Nov 2005 23:52:30 +0100, DF a écrit :

fais :

echo "#!/bin/sh" > ls
echo "echo Pan ! vous etes mort !" >> ls
chmod 777

export PATH=.:$PATH

ls
Avatar
Pascal
Salut,


J'ai lu dans une doc Linux, de saisir: sh ./ le_nom_du_fichier_script
pour lancer un script.
Si j'ai bien compris la signification de l'expression ./ qui, me semble
t-il, veut dire "situé dans le répertoire courant", je ne vois pas
l'intérêt de mentionner cette expression. J'ai raté quelque chose ?


Oui, dans ce cas ci, le « ./ » est complètement inutile.


Ou presque. Pour le plaisir, chipotons un peu :

$ sh -i


Ne pas oublier de faire "exit" ensuite pour quitter ce shell interactif.

$ sh ./-i
Hello world !
$ file ./-i
./-i: Bourne shell script text executable


Toujours aussi taquin hein ?
Je doute que préfixer par un "-" le nom d'un fichier et à plus forte
raison d'un script ou exécutable fasse partie des bonnes pratiques. Et
puis, il y a l'option "--", supportée par nombre de commandes, qui
indique que ce qui suit n'est pas à interpréter comme une option même si
ça commence par "-" :

$ sh -- -i
Hello world !
$ file -- -i
-i: Bourne shell script text executable



Avatar
TiChou
Dans le message <news:dlkgip$20tv$,
** tapota sur f.c.o.l.configuration :

$ sh ./-i
Hello world !
$ file ./-i
./-i: Bourne shell script text executable


Toujours aussi taquin hein ?


:-P

Je doute que préfixer par un "-" le nom d'un fichier et à plus forte
raison d'un script ou exécutable fasse partie des bonnes pratiques.


Certes. Mais l'exemple donné ici ne se limite pas qu'au lancement de script.
L'usage du ./ peut se présenter partout où un nom de fichier est donné comme
paramètre à une commande et il n'est alors pas impossible d'avoir à faire à
des fichiers commençant par un «-».

Et puis, il y a l'option "--", supportée par nombre de commandes, qui
indique que ce qui suit n'est pas à interpréter comme une option même si
ça commence par "-" :


Sous Linux et pour les commandes de bases, oui, tout à fait. Sous d'autres
unix pas toujours. Pour les commandes ne le supportant pas, le problème se
pose alors.
C'est un sujet sur les shells qui revient assez souvent sur fr.comp.os.unix
et les deux solutions qui sont alors données sont celle que tu viens
d'évoquer et alternativement celle que j'ai soulevé. -- ou ./

--
TiChou