web-dev-qa-db-fra.com

Impossible d'exécuter le programme C: "a.out: commande introuvable"

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?

15
Justin

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.)

23
Keith Thompson

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.

6
Nemanja Boric