Я хочу установить переменную 'Пути' в .desktop файле относительно местоположения, где файл на рабочем столе расположен, и мне не может удаться сделать это.
Когда я не объявляю это или устанавливаю его для очищения его значения по умолчанию к моей домашней папке, неважно, откуда я выполняю его; и это не принимает значения относительно моего текущего местоположения в файловой системе.
Вы не можете установить CWD в .desktop файле. Если Вы захотите, чтобы приложение имело определенный CWD, то необходимо будет записать простой сценарий обертки для приложения, которое выглядит примерно так:
#!/bin/sh
(cd /where/you/want/it/to/be && exec your_program)
Можно заменить your_program
там с $@
и запущенный скрипт с your_program как аргумент, как run-in-dir.sh your_program
. Таким образом, можно использовать тот же сценарий для обертывания любой программы, которую Вы хотите запустить в том каталоге.
Вы можете клудж вокруг этого при помощи встроенного мини-сценария удара на Вашем Должностном лице. Это добавит путь .desktop файла для СОЕДИНЕНИЯ КАНАЛОМ до выполнения команды.
Exec=bash -c "export PATH=$PATH:`dirname %k`; your_command"
%k заменит путь самого файла на рабочем столе. dirname
команда обрубает часть имени файла, оставляя только каталог. После того как ПУТЬ установлен как это, your_command
может быть вызван без полного пути.
Я использовал это:
Exec=bash -c 'cd $(dirname %k) && ./SCRIPT_NAME'
%k является полным именем .desktop файла включая его путь. Это затем используется dirname для получения местоположения и каталога изменения к тому местоположению. Наконец, теперь, когда это находится в правильном месте, это находит сценарий и выполняет его.
Для имен каталогов с пробелами на имя это наконец работало на меня:
Exec=/bin/bash -c 'cd "$(dirname "$0")"; wine game.exe -windowed' %k
Это работало на меня Ubuntu 14.04:
Exec=bash -c "cd %k && ./app.run"
Последняя спецификация говорит, что %k указывает на местоположение файла на рабочем столе:
%k - Местоположение файла на рабочем столе как любой URI (если, например, получено от vfolder системы) или локальное имя файла или пустой, если никакое местоположение не известно.