C++: std::filesystem falscher Pfad

Gast #6263487
Lesenswert?

Hallo,

kurze Frage, wenn ich über ein shell-skript (#!/bin/sh 
x-terminal-emulator usw...) ein Programm öffne und den Programmpfad per 
std::filesystem::current_path() anzeigen lasse dann entspricht dieser: 
"/home/user" und ist damit falsch. Statt dem echten Programmpfad bekomme 
ich den Userpfad.

Hat jemand eine Idee wie ich per std::filesystem den korrekten Pfad 
erhalte?

Grüße
Gast #6263503
Lesenswert?

> wenn ich über ein shell-skript (#!/bin/sh x-terminal-emulator usw...)
> ein Programm öffne und den Programmpfad per std::filesystem::current_path()
> anzeigen lasse dann entspricht dieser: "/home/user" [..]

also in "/home/user" ausgeführt?

> [..] und ist damit falsch.

Klingt nicht so.

> Statt dem echten Programmpfad bekomme ich den Userpfad.

std::filesystem::current_path() liefert das cwd, also alles bestens.

HTH
#6263532
Lesenswert?

C++Love schrieb:
> kurze Frage, wenn ich über ein shell-skript (#!/bin/sh
> x-terminal-emulator usw...) ein Programm öffne und den Programmpfad per
> std::filesystem::current_path() anzeigen lasse dann entspricht dieser:
> "/home/user" und ist damit falsch.

Warum ist das falsch?

> Statt dem echten Programmpfad bekomme ich den Userpfad.

Was meinst du mit "echten Programmfad"? Du bekommst das aktuelle 
Arbeitsverzeichnis, was in so einem Fall üblicherweise das 
Home-Verzeichnis ist.
Gast #6263537
Lesenswert?

> also in "/home/user" ausgeführt?

Nein natürlich nicht daher die Frage, das Programm liegt ganz woanders 
als "/home/user".
Das shell-skript welches Programmpfad enthält liegt auf dem Desktop 
damit ich von dort das Programm starten kann.
Der durch std::filesystem::current_path() ermittelte Pfad ist falsch 
denn er zeigt das user-Verzeichnis und nicht den korrekten Pfad.
Gast #6263544
Lesenswert?

ok nochmal Beispiel:

Das Programm befindet sich in:
/home/user/data/projekt8/v2/program

Aber std::filesystem::current_path() gibt raus:
/home/user


Der echte Pfad ist im shell-skript und das shell-skript liegt auf dem 
Desktop damit ich von dort das Programm starten kann.
#6263569
Lesenswert?

C++Love schrieb:
>> also in "/home/user" ausgeführt?
>
> Nein natürlich nicht daher die Frage, das Programm liegt ganz woanders
> als "/home/user".

In welchem Verzeichnis das Programm liegt, ist für die Funktion egal.

> Der durch std::filesystem::current_path() ermittelte Pfad ist falsch
> denn er zeigt das user-Verzeichnis und nicht den korrekten Pfad.

Nein, der ist richtig. Er entspricht dem Arbeitsverzeichnis. Was falsch 
ist, ist deine Annahme, dass es der sein müsse, wo die ausführbare Datei 
des Programms liegt.
#6263586
Lesenswert?

> Aber std::filesystem::current_path() gibt raus:
> /home/user

Ich sehe bei dem geschilderten Verhalten kein Problem. Du verwechselst 
wahrscheinlich (1) den aktuellen Pfad mit (2) dem Pfad, wo das 
Executable gespeichert ist.

Siehe auch 
https://stackoverflow.com/questions/4025370/can-an-executable-discover-its-own-path-linux

(1) kann sehr wohl mit std::filesystem::current_path() abgefragt werden;
(2) wohl am bequemsten über das Auslesen des Links von /proc/self/exe, 
siehe stackoverflow. Einfach mal ausprobieren mit
1
ls -al /proc/self/exe
 oder
1
readlink /proc/self/exe

Probiere in einer Shell (unter X z.B. xterm, konsole, gnome-terminal, 
...), das aktuelle Verzeichnis zu wechseln und dann Dein Executable 
auszuführen, was std::filesystem::current_path() aufruft; z.B.
1
cd /
2
/home/user/Desktop/executable

und dann
1
cd /home/user/Desktop
2
/home/user/Desktop/executable
Gast #6263686
Lesenswert?

Ok danke vestehe, mein Ziel war der Pfad wo das Executable gespeichert 
ist. Hatte gedacht std::filesystem::current_path() liefert dies aber 
dann scheint std::filesystem das leider gar nicht zu beherrschen.

Mit /proc/self/exe funktioniert es :-)

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