Как я могу указать значок с пути RELATIVE для файла записи рабочего стола Linux?
Для одного из моих приложений Linux у меня есть приложение binary, launcher.sh script (для 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 script.
Какой был бы лучший способ сделать это? Используя sed
или какую-нибудь другую утилиту замены с псевдо-регулярным выражением, например Icon=([valid path chars]+)\n
, возможно?
Ответы
Ответ 1
Проведя еще несколько исследований, похоже, что можно указать относительные пути для значка в файле ввода рабочего стола, насколько я могу видеть.
Обходной путь, который я использовал, заключался в том, чтобы добавить следующий код в конец моего launcher.sh script:
mv myapp.desktop myapp.desktop-bak
sed -e "s,Icon=.*,Icon=$PWD/app.svg,g" myapp.desktop-bak > myapp.desktop
rm myapp.desktop-bak
Это будет обновлять путь к значку каждый раз, когда запускается программа запуска script, а так как файл .desktop указывает на панель запуска script, щелчок файла .desktop эффективно обновляет ее значок.
Я знаю, что вы могли бы использовать cat
или опцию -i, чтобы сократить приведенный выше код, но я прочитал, что используемое мной решение более надежное. Если у кого-то есть дополнительная информация, пожалуйста, напишите комментарий.
Ответ 2
Вы можете использовать echo $(echo ~)
для использования вывода команды или echo $(echo $var)
для переменных
Например:
echo "Icon=$(echo ~)/Pictures/Icons/whatsapp-webapp.svg" > path/to/file.desktop