Forum: PC-Programmierung GCC & Raspberry: Programmaufruf


von Albert (FTU) (Gast)


Lesenswert?

Das Programm unten habe ich auf einem Raspberry (OS Raspbian) direkt im 
Terminal eingeben und kompiliert. Funktioniert.

Obwohl ich im Verzeichnis /tmp bin, kann ich das Programm nur mit 
./hello aufrufen, mit hello allein geht es nicht.

So steht such im Wiki:

http://linuxwiki.de/ProgrammeStarten

Was ist der (tiefere) Grund?
1
cd /tmp
2
cat <<EOF > main.c
3
#include <stdio.h>
4
5
int main() {
6
    printf("Hello World\n");
7
    return 0;
8
}
9
EOF
10
gcc -o hello main.c
11
./hello # Press Enter to execute your program

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Albert (FTU) schrieb:
> Obwohl ich im Verzeichnis /tmp bin, kann ich das Programm nur mit
> ./hello aufrufen, mit hello allein geht es nicht.

Das ist unter unixoiden Betriebssystemen üblich; Programme werden nur 
aus dem Pfad (Environmentvariable PATH) aufgerufen, es sei denn, bei 
ihrem Aufruf wird ein Pfad angegeben. ./ ist eine relative Pfadangabe.

von Gerhard Z. (germel)


Lesenswert?

Die Shell schaut in allen Ordnern nach, die in der PATH Variable 
gelistet sind. Dein jeweils aktueller Ordner ist es nicht. Der aktuelle 
Ordner lässt sich durch den Punkt "." ansprechen (wie z.B. zei Punkte 
".." den übergeordneten Ordner bezeichnen).

Siehe:
echo $PATH

Du kannst den aktuellen Ordner mit in die PATH Variable aufnehmen
PATH=${PATH}:.

dann sollte der Aufruf auch ohne ./ gehen.

Gerhard

von Albert (FTU) (Gast)


Lesenswert?

Vielen Dank für die Antworten :)

von Jim M. (turboj)


Lesenswert?

Gerhard Z. schrieb:
> Die Shell schaut in allen Ordnern nach, die in der PATH Variable
> gelistet sind. Dein jeweils aktueller Ordner ist es nicht.

Und das hat einen guten Grund. Mit '.' im $PATH kann man viel 
Schindluder treiben, wenn man z.B. im $home ein eigenes "ls" als Binary 
hat.

Das ist eine dicke Sicherheitslücke. Man sollte sich lieber das 
./programmname angewöhnen.

von Gerhard Z. (germel)


Lesenswert?

Keine Widerrede. Desshalb: wenn ./ in den Pfad, dann als letzter 
Eintrag. Dann wird das reguläre ls vorher gefunden.

Gerhard

von Rolf M. (rmagnus)


Lesenswert?

Der Klassiker ist, dass jemand sein Programm "test" nennt und sich dann 
beim Aufruf wundert, warum es nichts tut.
Ich würde einfach explizit ./hello schreiben. Man hat sich da schnell 
dran gewöhnt, und dann fällt es einem gar nicht mehr auf.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Sobald das Programm produktiv genutzt wird, würde ich es nach 
/usr/local/bin kopieren. Dieser Pfad ist im allgemeinen in $PATH und ist 
genau für so etwas gedacht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.