it-swarm.com.de

Wie kann ich die Variable 'Path' in einer .desktop-Datei so festlegen, dass sie relativ zu dem Speicherort ist, an dem sich die Desktop-Datei befindet?

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 auf "leer" stelle, wird standardmäßig mein Ausgangsordner verwendet, unabhängig davon, von wo aus ich es ausführe. und es akzeptiert keine Werte relativ zu meinem aktuellen Speicherort innerhalb des Dateisystems.

11
kicsyromy

Sie können das CWD nicht in einer .desktop-Datei festlegen. Wenn eine Anwendung eine bestimmte CWD haben soll, 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_program dort durch [email protected] ersetzen und das Skript mit Ihrem_Programm als Argument ausführen, z. B. run-in-dir.sh your_program. Auf diese Weise können Sie jedes Programm, das Sie in diesem Verzeichnis starten möchten, mit demselben Skript umbrechen.

3
dobey

Sie können dies umgehen, indem Sie ein Inline-Bash-Miniskript auf Ihrem Exec verwenden. Dies fügt den Pfad der .desktop-Datei zu PATH hinzu, 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 Befehl dirname schneidet den Dateinamen ab und lässt nur das Verzeichnis übrig. Sobald PATH so eingestellt ist, kann your_command ohne vollständigen Pfad aufgerufen werden.

11
roadmr

Ich habe das benutzt:

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

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

2
Marian

Für 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 auf https://unix.stackexchange.com/a/144428/61349

0
ThorSummoner

Das hat bei mir mit Ubuntu 14.04 geklappt:

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

Neueste spec sagt, dass % k auf den Speicherort der Desktop-Datei verweist:

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

0
nexayq