J'ai écrit mon premier programme en C. Je l'ai compilé et il a mis un fichier sur le bureau appelé a.out
(comme le livre que je lis me l'a dit), mais quand je tape la commande a.out
dans le terminal et exécutez-le, il est dit -bash: a.out: command not found
. Pourquoi dit-il cela?
Selon le livre "Programming in C" de Stephen Kochan, ce que je fais est correct parce que je suis dans le bon répertoire (bureau), je crois. Il indique également que si le fichier n'est pas dans le bon chemin, je peux l'ajouter au chemin ou exécuter ./a.out
, cette méthode fonctionne et exécute le programme, pourquoi?
Lorsque vous tapez un nom de commande (a.out
n'est pas différent de tout autre nom de commande à cet égard), le Shell recherche un fichier exécutable avec ce nom. Il effectue cette recherche en utilisant une liste de noms de répertoires stockés dans votre $PATH
variable d'environnement.
Vous pouvez voir votre $PATH
en tappant
echo $PATH
à votre invite Shell. Une valeur typique pourrait être quelque chose comme
/usr/bin:/bin
mais vous aurez probablement aussi des répertoires supplémentaires.
Puisque a.out
est dans votre répertoire de travail actuel (tapez pwd
pour voir de quel répertoire il s'agit), et votre répertoire de travail actuel n'est probablement pas dans votre $PATH
, vous ne pouvez pas l'exécuter en tapant simplement a.out
.
Puisque vous pouvez vous référer à votre répertoire actuel en tant que .
, vous pouvez (et devez) exécuter la commande en tapant
./a.out
REMARQUE: vous pouvez avez .
dans votre $PATH
, mais c'est une mauvaise idée de le faire, car cela rend trop facile l'exécution accidentelle de commandes aléatoires. Si .
est à l'avant de votre $PATH
, imaginez que je vous demande de cd
dans mon répertoire et de taper ls
- mais j'ai installé un fichier appelé ls
qui fait quelque chose de méchant. En mettant .
à la fin de votre $PATH
atténue ce risque, mais il ne l'élimine pas entièrement. Il est préférable de prendre l'habitude de précéder un nom de fichier avec ./
si vous souhaitez l'exécuter à partir du répertoire courant.
(J'ai ignoré le fait que les alias, les fonctions et les commandes intégrées de Shell peuvent également être exécutés de cette façon.)
Vous devez taper ./a.out
. Cette ./
indique à bash de rechercher le fichier a.out
dans le répertoire courant (point - .
- pointe vers le répertoire courant).
Si vous tapez a.out
en bash, sans spécifier le répertoire, il le recherchera dans les répertoires de $PATH
variable (si cela vous intéresse, exécutez echo $PATH
). Vous pouvez donc soit lui dire d'exécuter le fichier présent dans le répertoire courant, soit ajouter le répertoire courant (ou le répertoire Desktop) au $PATH
.