Как экранировать пробелы в файлах .desktop Exec line

15

Я хочу сделать .desktopфайл, как описано здесь .

[Desktop Entry]
Name=Sublime Text 2
GenericName=Sublime Text 2
Comment=Edit text files
Exec=/home/user/opt/sublime/Sublime Text 2/sublime_text %U

Тем не менее, запуск этого из контекстного меню Наутилуса с помощью Open с этим дает мне

Не удалось найти '/ home / user / opt / sublime / Sublime'

Так я попробовал

Exec="/home/user/opt/sublime/Sublime Text 2/sublime_text" %U

и получил

Текст закончился до того, как была найдена подходящая цитата для ". (Текст был" "/ home / user / opt / sublime / Sublime ')

Как правильно избежать пробелов в Execстроке .desktopфайлов?

NH2
источник

Ответы:

5

Перед каждым пробелом ставится обратный слеш:

[Desktop Entry]
Name=Sublime Text 2
GenericName=Sublime Text 2
Comment=Edit text files
Exec=/home/user/opt/sublime/Sublime\ Text\ 2/sublime_text %U
январь
источник
4
Это не работает:Text ended just after a '\' character. (The text was '/home/user/opt/sublime/Sublime\')
nh2
Забавно, у меня это работает.
январь
Используем ли мы одни и те же версии? GNOME nautilus 3.4.212.04.
nh2
У меня работает на Ubuntu 16.04, а также, кстати, двойные кавычки. Однако НЕ ИСПОЛЬЗУЙТЕ пробелы и не указывайте значения Path и Icon, это может привести к тому, что приложение не будет запущено (на моем компьютере значок черты мигает, но ничего не делает, даже не открывает терминал, даже если Terminal = true). Кстати, та же проблема, если вы не избегаете Exec, так что вы можете себе представить, что мне потребовалось некоторое время, чтобы найти, что делать с каждой строкой .desktop!
hsandt
Странно ... Это работает, если я запускаю лаунчер вручную, но не при автозапуске. Эта функция супер прослушивается.
Адриан Лопес
3

У меня была точно такая же проблема! Попробовав различные шаблоны экранирования / цитирования, я решил, что самым простым решением было бы иметь символическую ссылку sublime_textна мой $ PATH (или вы могли бы использовать псевдоним командной строки).

[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Icon[C]=/usr/share/Sublime Text 2/Icon/256x256/sublime_text.png
Name[C]=Sublime Text 2
Exec=Sublime-Text-2 %U
Comment[C]=Text Editor
Name=Sublime Text 2
Comment=Text Editor
Icon=/usr/share/Sublime Text 2/Icon/256x256/sublime_text.png
X-Desktop-File-Install-Version=0.21
c24w
источник
4
Это разумный обходной путь, но мы до сих пор не знаем , как мы предназначены для использования пространства в .desktopфайлах.
nh2
2
Согласился, хотя мне кажется, что Execон разбирается не так, как мы, неправильно реализуемое. Он интерпретирует пробел как конец значения, что является странным, поскольку вы можете использовать неэкранированные пробелы / строки без кавычек для путей в других свойствах!
c24w
3

Вы пытались использовать кавычки вместо цитат? У меня есть настроенный файл .desktop с пробелами в строке Exec, а мой работает с кавычками.

Генри Гибсон
источник
3

У меня та же проблема, когда я следовал инструкциям по установке с сайта ( http://monkeyhacks.com/post/how-to-install-sublime-text-2-on-ubuntu-14-04 ). Поэтому мое решение было :

  1. Удалить / удалить программную ссылку под названием «возвышенный» из /usr/bin

  2. Удалите все пробелы в папке «Sublime Text 2», переименовав ее в «SublimeText2»

  3. Повторно создайте мягкую ссылку в /usr/bin/:

    sudo ln -s /opt/SublimeText2/sublime_text /usr/bin/sublime
    
  4. Создайте файл .desktop, включающий:

    Exec=/opt/SublimeText2/sublime_text %U
    Icon=/opt/SublimeText2/Icon/48x48/sublime_text.png
    
SantyVillagomez
источник
0

Я столкнулся с той же проблемой, используя GNOME nautilus 3.4.2 в Ubuntu 12.04. Я нашел этот альтернативный обходной путь в отчете об ошибке для той же проблемы в Moblin UI Framework, который я предпочитаю тому, о котором я упоминал, когда вам нужно добавить каждую папку в $ PATH.

Обходной путь прост:
«Создайте символическую ссылку в пути без пробелов и укажите поле EXEC на эту ссылку».

Бьерн
источник
-1

Файлы .desktop не обрабатывают кавычки, пробелы и экранированные символы так, как это делают оболочки. Вероятно, лучшим вариантом было бы вызвать оболочку в вашей строке exec для получения ожидаемого поведения, например так:

[Desktop Entry]
Name=Sublime Text 2
GenericName=Sublime Text 2
Comment=Edit text files
Exec=sh -c "/home/user/opt/sublime/Sublime Text 2/sublime_text" %U

Для получения дополнительной информации, пожалуйста, смотрите man sh. Это также избавляет от необходимости создавать и поддерживать символические ссылки, как вы будете делать с другими ответами.

KDØBPV
источник
Это решение не передает аргументы, например пути к файлам, к вызываемой в конечном итоге команде. -1
Дэвид Фёрстер
Да. Видимо, это тоже не надежно. Я проверил это решение перед публикацией, и оно сработало. Но затем я изменил свой тест, чтобы проверить, были ли вы правы, и теперь он НЕ работает, даже после восстановления того, как он работал. Weird.
KDØBPV