Для одного из моих приложений Linux у меня есть двоичный файл приложения, launcher.sh сценарий (для LD_LIBRARY_PATH) и .desktop файл, все в той же папке.
Я хотел бы использовать относительный путь, а не полный путь для значка.
Я попробовал:
Icon=app.svg
Icon=./app.svg
Icon=$PWD/app.svg
Icon=$(dirname %k)/app.svg
но ни один из них не работает (только Icon=/path/to/app.svg
). Если не возможно указать относительный путь, и я должен использовать обходное решение, я думал, что мог повторно создать путь значков в .desktop файле каждый раз, когда launcher.sh скрипт запущен.
Каков был бы лучший способ сделать это? Используя sed
или некоторая другая заменяющая утилита с pseudo-regex как Icon=([valid path chars]+)\n
возможно?
После дополнительных исследований выяснилось, что невозможно указать относительные пути для значка в файле записи на рабочем столе, насколько я могу судить.
Обходной путь, который я использовал, заключался в том, чтобы добавить следующий код в конец моего скрипта launcher.sh:
mv myapp.desktop myapp.desktop-bak
sed -e "s,Icon=.*,Icon=$PWD/app.svg,g" myapp.desktop-bak > myapp.desktop
rm myapp.desktop-bak
Это обновит путь к значку каждый раз, когда запускается скрипт, и поскольку файл .desktop указывает на сценарий запуска, щелчок по файлу .desktop эффективно обновляет его значок.
Я знаю, что вы можете использовать cat
или параметр -i, чтобы сократить приведенный выше код, но я читал, что решение, которое я использовал, более надежное. Если у кого-то есть дополнительная информация по этому поводу, оставьте комментарий.