Hab ich jetzt gemacht und der einzige Unterschied der mir auffällt ist, dass am Anfang ein ".: " mehr raus kommt, als davor, der Rest ist identisch geblieben. Ich kann damit nichts anfangen
Erinnern wir uns mal zurück. Da habe ich geschrieben:
Du kannst ausführbare Dateien ausführen, wenn sie in einem Ordner liegen, der in der sogenannten Umgebungsvariable $PATH definiert ist. Du kannst also mal $PATH [Anmerkung: korrekterweise echo $PATH] im Terminal eingeben, und dann wird Dir, mit einem Doppelpunkt getrennt, angezeigt, wo solche direkt ausführbaren Dateien liegen.
Den wichtigsten Teil habe ich jetzt mal unterstrichen. Was heißt es also, wenn in der Datei noch
.: mit drin steht und
. für das aktuelle Verzeichnis steht? Eigentlich müsste es doch offensichtlich sein, was die Aufgabe einem zeigen möchte...
Beim Zurücksetzen habe ich mich getäuscht - da die Änderungen nur für die aktuelle Terminalsession gelten, kannst Du noch ein neues Terminalfenster aufmachen, wo dann alles wieder normal ist
ich dachte Ausführen kann man mit, sh , ./ , bash , und source.Wenn das nicht ausführen ist, was ist dann ausführen?
Nein.
./ sagt vereinfacht ausgedrückt: "Die ausführbare Datei ist in diesem Verzeichnis, in dem ich mich gerade im Terminal befinde." Das ist kein Befehl, der sagt, "Führe diese Datei aus!". Man muss nur den Pfad zu dieser Datei angeben und die Bash merkt, wenn die Datei ausführbar ist und führt sie dann aus.
Hast Du beispielsweise Deine kompilierte Datei
hello im Ordner
~/projects/hello/, und befindest Dich im Terminal auch gerade im gleichen Ordner, dann kannst Du diese Datei mit
./hello oder
~/projects/hello/hello ausführen.
./ ist die
relative Pfadangabe für das aktuelle Verzeichnis. Wenn Du eingibst:
cd . oder
cd ./, dann sagst Du "Wechsle in das Verzeichnis, in dem ich mich gerade befinde." - es passiert also nichts, Du bleibst in genau dem gleichen Verzeichnis.
Wenn Du nur
hello eingibst, schaut der Computer in
$PATH, in welche Verzeichnisse er schauen soll. Und natürlich findet er das Programm dort nicht, deshalb bekommst Du die Fehlermeldung. Also fügst Du mit
.: den Ordner
. mit in
$PATH ein. Somit schaut der Computer nicht nur in den vordefinierten Verzeichnissen nach dem hello-Programm, wenn Du
hello eingibst, sondern auch in dem aktuellen Verzeichnis, in dem Du auf dem Terminal bist.
Wenn Du jetzt, wie von Kuzorra vorgeschlagen, einfach
export PATH=~/projects/hello:$PATH eingibst, damit das Verzeichnis, in dem die hello-Datei ist,
absolut angegeben wird(zumindest, solange man den Benutzer nicht wechselt), dann kannst Du von jedem beliebigen Verzeichnis aus das Programm durch die Eingabe
hello starten.
Ich hoffe, dass das jetzt wirklich verständlich war.