Wie kann ich die Variable 'Path' in einer .desktop-Datei relativ zum Speicherort der Desktop-Datei festlegen?

11

Ich möchte die Variable 'Path' in einer .desktop-Datei relativ zu dem Speicherort festlegen, an dem sich die Desktop-Datei befindet, und das kann ich nicht.

Wenn ich es nicht deklariere oder leer lege, wird standardmäßig mein Home-Ordner verwendet, unabhängig davon, von wo aus ich es ausführe. und es werden keine Werte relativ zu meinem aktuellen Speicherort im Dateisystem akzeptiert.

Kicsyromie
quelle
Ich habe dieses Problem gehabt. Ich habe Problemumgehungen gefunden, die manchmal radikal kompliziert sind, je nachdem, was Sie tun. Verwenden Sie derzeit eine Problemumgehung? Wenn nicht, kann ich Ihnen vielleicht helfen. Ich habe keine xdg-Dokumente gefunden, die viel dazu erklären.
Bambuntu
OP suchen Sie noch eine Antwort? In diesem Fall müssen Sie Ihre Frage möglicherweise erneut veröffentlichen, da diese zum Schließen markiert ist. Grüße,
Ringtail

Antworten:

3

Sie können das CWD nicht in einer .desktop-Datei festlegen. Wenn Sie möchten, dass eine Anwendung eine bestimmte CWD hat, müssen Sie ein einfaches Wrapper-Skript für die Anwendung schreiben, das ungefähr so ​​aussieht:

#!/bin/sh

(cd /where/you/want/it/to/be && exec your_program)

Sie können your_programdort $@das Skript durch your_program als Argument ersetzen und ausführen, z run-in-dir.sh your_program. Auf diese Weise können Sie dasselbe Programm verwenden, um jedes Programm, das Sie starten möchten, in dieses Verzeichnis zu verpacken.

Dobey
quelle
14

Sie können dies umgehen, indem Sie ein Inline-Bash-Miniskript auf Ihrem Exec verwenden. Dadurch wird der Pfad der .desktop-Datei zu PATH hinzugefügt, bevor Sie Ihren Befehl ausführen.

Exec=bash -c "export PATH=$PATH:`dirname %k`; your_command"

% k wird durch den Pfad der Desktop-Datei selbst ersetzt. Der dirnameBefehl schneidet den Dateinamen ab und lässt nur das Verzeichnis übrig. Sobald PATH so eingestellt ist, your_commandkann es ohne vollständigen Pfad aufgerufen werden.

Roadmr
quelle
1
Ich habe zu schnell geklickt und die falsche gewählt, aber Ihre Lösung ist perfekt.
CrandellWS
1
Dies könnte gut funktionieren mit dieser anderen Frage / Antwort stackoverflow.com/a/3464561/1815624
CrandellWS
2

Ich habe das benutzt:

Exec=bash -c 'cd $(dirname %k) && ./SCRIPT_NAME'

% K ist der vollständige Name der .desktop-Datei einschließlich ihres Pfads. Es wird dann von dirname verwendet, um einen Speicherort abzurufen und das Verzeichnis in diesen Speicherort zu ändern. Jetzt, da es am richtigen Ort ist, findet es das Skript und führt es aus.

Marian
quelle
0

Bei Verzeichnisnamen mit Leerzeichen im Namen funktionierte dies schließlich für mich:

Exec=/bin/bash -c 'cd "$(dirname "$0")"; wine game.exe -windowed' %k

Gutschrift an /unix//a/144428/61349

ThorSummoner
quelle
0

Das hat bei mir funktioniert Ubuntu 14.04:

Exec=bash -c "cd %k && ./app.run"

Die neueste Spezifikation besagt, dass % k auf den Speicherort der Desktop-Datei verweist:

% k - Der Speicherort der Desktop-Datei als URI (wenn beispielsweise vom Vfolder-System abgerufen) oder als lokaler Dateiname oder leer, wenn kein Speicherort bekannt ist.

nexayq
quelle