C-Programm kann nicht ausgeführt werden: "a.out: Befehl nicht gefunden"

7

Ich habe mein erstes Programm in C geschrieben. Ich habe es kompiliert und eine Datei auf den Desktop geschrieben, die a.out heißt (wie das Buch, das ich lese, hat es mir gesagt), aber wenn ich den Befehl a.out eintippe Terminal und führen Sie es sagt -bash: a.out: command not found . Warum sagt es das?

Laut dem Buch "Programming in C" von Stephen Kochan ist das, was ich mache, korrekt, weil ich im richtigen Verzeichnis (Desktop) bin, glaube ich. Es sagt auch, dass, wenn die Datei nicht im richtigen Pfad ist, ich sie entweder zum Pfad hinzufügen oder ./a.out ausführen kann, diese Methode funktioniert und das Programm ausführt, warum ist das?

    
Justin 11.04.2014, 23:08
quelle

2 Antworten

14

Wenn Sie einen Befehlsnamen eingeben ( a.out unterscheidet sich von keinem anderen Befehlsnamen in dieser Hinsicht), sucht die Shell nach einer ausführbaren Datei mit diesem Namen. Sie führt diese Suche mit einer Liste von Verzeichnisnamen durch, die in Ihrer Umgebungsvariablen $PATH gespeichert sind.

Sie können Ihre aktuelle $PATH sehen, indem Sie

eingeben %Vor%

bei Ihrer Shell-Eingabeaufforderung. Ein typischer Wert könnte etwas wie

sein %Vor%

obwohl Sie wahrscheinlich auch einige zusätzliche Verzeichnisse haben werden.

Da sich a.out in Ihrem aktuellen Arbeitsverzeichnis befindet (geben Sie pwd ein, um zu sehen, welches Verzeichnis das ist), und Ihr aktuelles Arbeitsverzeichnis ist wahrscheinlich nicht in Ihrem $PATH , können Sie Führe es nur durch Eingabe von a.out aus.

Da Sie auf Ihr aktuelles Verzeichnis als . verweisen können, können (und sollten) Sie den Befehl ausführen, indem Sie

eingeben %Vor%

HINWEIS: Sie können % in . haben, aber es ist eine schlechte Idee, dies zu tun, da es zu einfach ist, zufällige Befehle versehentlich auszuführen. Wenn $PATH an der Spitze von . steht, stell dir vor, dass ich dich nach $PATH zu meinem Verzeichnis frage und cd schreibe - aber ich habe eine Datei namens ls installiert, die etwas Unangenehmes tut. Durch die Verwendung von ls am Ende von . wird dieses Risiko zwar verringert, aber nicht vollständig eliminiert. Am besten kultivieren Sie die Angewohnheit, einen Dateinamen mit $PATH zu beginnen, wenn Sie ihn aus dem aktuellen Verzeichnis ausführen möchten.

(Ich habe die Tatsache ignoriert, dass Aliase, Funktionen und integrierte Shell-Befehle auch auf diese Weise ausgeführt werden können.)

    
Keith Thompson 11.04.2014 23:23
quelle
5

Sie müssen ./a.out eingeben. Das ./ teilt der bash mit, dass sie im aktuellen Verzeichnis nach der Datei a.out sucht (dot - . - zeigt auf das aktuelle Verzeichnis).

Wenn Sie a.out in bash eingeben, ohne das Verzeichnis anzugeben, sucht es nach Verzeichnissen in $PATH variable (wenn Sie diese sehen möchten, führen Sie echo $PATH aus). Sie können also entweder angeben, dass die Datei im aktuellen Verzeichnis ausgeführt werden soll, oder Sie können das aktuelle Verzeichnis (oder Desktop-Verzeichnis) zum $PATH hinzufügen.

    
Nemanja Boric 11.04.2014 23:09
quelle

Tags und Links