Bases de Linux et de la ligne de commande
Le script exécutable run.sh, situé dans le répertoire courant, donne « command not found » quand on le lance en tapant « run.sh », mais s'exécute quand on tape « ./run.sh ». Quelle en est la raison ?
- Arun.sh n'a pas le droit d'exécution, et c'est seulement avec ./ devant qu'il peut s'exécuter sans ce droit
- BUn nom de commande sans barre oblique n'est cherché que dans les répertoires de la variable d'environnement PATH, qui en général ne contient pas le répertoire courant
- CLe #!/bin/bash de la première ligne de run.sh (le shebang) n'est lu que lorsqu'on l'exécute avec ./ devant
Afficher la réponse et l'explication
Réponse : B. Un nom de commande sans barre oblique n'est cherché que dans les répertoires de la variable d'environnement PATH, qui en général ne contient pas le répertoire courant
Quand le shell reçoit un nom de commande sans barre oblique, il cherche dans l'ordre les répertoires énumérés, séparés par des deux-points, dans la variable d'environnement PATH (/usr/local/bin:/usr/bin, etc.), et exécute ce qu'il trouve. En général, on ne met pas le répertoire courant dans PATH, pour ne pas exécuter par erreur un programme malveillant portant le même nom et placé ailleurs. Écrire un chemin contenant une barre oblique, comme ./run.sh, exécute directement ce fichier sans chercher dans PATH. Le #!/bin/bash de la première ligne (le shebang) indique l'interpréteur qui exécute le script, quelle que soit la façon de le lancer.
Continuer : 9 autres questions sur Bases de Linux et de la ligne de commande