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
> 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
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.
> 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.
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.
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.
> 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 |
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 :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.