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?
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
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
HINWEIS: Sie können .
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.)
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.