Linux Programmstart aus Console

Gast #3350872
Lesenswert?

Hallo,

ich habe mal eine Frage zum Starten von Programmen aus der Console.


Ich starte ein Programm mit ./Name und es läuft wie es soll. Wennn ich 
es jedoch aus einem anderen Verzeichnis Pfad/Pfad/Name starte bekommen 
ich zur Laufzeit ein Segmentation Fault. Woran kann das liegen gibt es 
bei den beiden Aufrufen unterschiede?

Danke
#3350898
Lesenswert?

Peter II schrieb:
> ja das Arbeitsverzeichnis ist unterschiedlich

Genau. Arbeitsverzeichnis ist immer das Verzeichnis aus dem gestartet 
wird.
Bei ./Name ist es eben nimmer das richtige, mit /Pfad/Name meist nicht 
:)

Lösungsmöglichkeit 1:
Wenn es dein eigenes Programm ist kannst du das Arbeitsverzeichnis per 
"chdir()" aufruf beim Programmstart entsprechend setzen.

Möglichkeit 2:
Wenn du keinen Zugriff auf den Programmcode hast kannst du ein Skript 
als "Wrapper" benutzen.
Im Skript zuerst ins Verzeichnis des Programms wechseln und dann 
starten.
Aufrufen tust du dann eben /Pfad/Skriptname
Gast #3350923
Lesenswert?

Ja danke für die schnellen Antworten. Es lag tatsächlich daran, da ich 
eine Config Datei auslese und diese beim Aufruf Pfad/Pfad/Name dann ja 
nicht vorhanden ist. War mir bis jetzt nicht klar das sich das 
Arbeitsverzeichnis dann ändert.



Danke :D
#3351413
Lesenswert?

foobar schrieb:
> Kommt auf die Programmiersprache an, in Python macht man das schon so...

Natürlich fängst du die Exception entsprechend ab. Und wenn nicht du, 
dann jeder, der halbwegs vernünftig programmiert.

Peter II schrieb:
> dann kommt bestimmt aber kein "Segmentation Fault"

Nein, aber es stürzt mit einer Exception ab, wenn du diese nicht 
abfängst, läuft also aufs selbe raus.
Gast #3351975
Lesenswert?

vn nn schrieb:
> Natürlich fängst du die Exception entsprechend ab. Und wenn nicht du,
> dann jeder, der halbwegs vernünftig programmiert.

Klar, aber die Antwort war auch auf den Beitrag bezogen, dass man das 
Öffnen prüft, das tut man nämlich in dem Fall nicht und lässt sich halt 
eine Exception werfen beim Lesen. Das man die auch abfangen sollte steht 
ausser Frage.
Gast #3352056
Lesenswert?

foobar schrieb:
> Klar, aber die Antwort war auch auf den Beitrag bezogen, dass man das
> Öffnen prüft, das tut man nämlich in dem Fall nicht und lässt sich halt
> eine Exception werfen beim Lesen. Das man die auch abfangen sollte steht
> ausser Frage.

Wenn "man" das tut, programmiert "man" Mist zusammen. Aber das erklaert 
den vermeintlichen Vorteil von solchen Sprachen: Fehlerbehandlung macht, 
wenn sie richtig gemacht wird, 80% vom Code aus. Laesst man sie weg, ist 
man natuerlich produktiver - bis es knallt. Dann steht man alleine im 
Wald, weil Fehler nicht dort gemeldet werden, wo sie passieren, sondern 
sonstwo.
Gast #3352111
Lesenswert?

Das hat rein garnichts damit zu tun keine Fehlerbehandlung zu machen.
Sondern damit wie die Fehlerbehandlung gemacht wird, entweder wie zB in 
C als "Look Before You Leap" oder wie in Python als "It's Easier to Ask 
Forgiveness Than Permission". Auch wenn der Anteil an Fehlerbehandlung 
womöglich nur mehr 78% vom Code ausmacht.
Gast #3352152
Lesenswert?

foobar schrieb:
> "It's Easier to Ask Forgiveness Than Permission".

Nur weil's einen coolen Namen hat, wird es nicht besser. Im Gegenteil, 
das ist ja heutzutage ueblich, schlechte Angewohnheiten einfach zum 
innovativen Entwicklungsstil zu erklaeren. Auf die von mir geschilderte 
Problematik gehst du ueberhaupt nicht ein.
Gast #3353782
Lesenswert?

Quak schrieb:
> Im Gegenteil,
> das ist ja heutzutage ueblich, schlechte Angewohnheiten einfach zum
> innovativen Entwicklungsstil zu erklaeren.

Achso, du bist von der Früher-war-alles-besser-Fraktion?
Fehler werden nicht sonstwo gemeldet, immerhin schreibst du selbst den 
Code und bist selbst verantwortlich wieviel auf einmal in einem try 
Block landet.
Wenn ich zb den errno zu spät prüfe, bin ich ja auch selbst schuld und 
kann auch nicht mehr sagen wo der Fehler aufgetreten ist.
Aber das wusstest du eh. Es ging dir ja nur um eine Rumstreiterei.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren