Como escapar de espaços em arquivos .desktop Exec line

15

Eu quero criar um .desktoparquivo como o descrito aqui .

[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

No entanto, executar isso no menu de contexto do Nautilus usando Abrir com isso me dá

Não foi possível encontrar '/ home / user / opt / sublime / Sublime'

Então eu tentei

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

e pegou

O texto foi finalizado antes que a citação correspondente fosse encontrada para ". (O texto era '" / home / user / opt / sublime / Sublime')

Qual é a maneira correta de escapar de espaços na Execlinha de .desktoparquivos?

nh2
fonte

Respostas:

5

Preceda cada espaço com uma barra invertida:

[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
janeiro
fonte
4
Isso não funciona:Text ended just after a '\' character. (The text was '/home/user/opt/sublime/Sublime\')
nh2 18/09/12
Engraçado, funciona para mim.
janeiro
Usamos as mesmas versões? GNOME nautilus 3.4.2em 12.04.
Nh2 19/09/12
Funciona para mim no Ubuntu 16.04, bem como aspas duplas por sinal. No entanto, NÃO escape de espaços nem cite os valores de Caminho e Ícone, pois o aplicativo não será executado (no meu computador, o ícone do traço pisca, mas não faz nada, nem abre o terminal, mesmo que Terminal = true). O mesmo problema, se você não escapar do Exec, a propósito, então você pode imaginar que demorei algum tempo para descobrir o que fazer com cada linha do .desktop!
hsandt
Estranho ... Isso funciona se eu executar o iniciador manualmente, mas não for iniciado automaticamente. Este recurso está super bugado.
Adrian Lopez
3

Eu estava tendo exatamente o mesmo problema! Depois de tentar vários padrões de escape / citação, decidi que a solução mais simples era ter um link simbólico sublime_textno meu $ PATH (ou você poderia usar um alias de linha de comando).

[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
fonte
4
Esta é uma solução sensata, mas ainda não sei como estamos significava usar espaços em .desktoparquivos.
nh2 23/01
2
Concordo, embora, para mim, apenas pareça bugs na maneira como Execé analisado, em vez de nos implementarmos incorretamente. Ele interpreta um espaço como o final do valor, o que é ímpar, pois você pode usar espaços sem escape / seqüências de caracteres sem aspas para caminhos nas outras propriedades!
C24w
3

Você já tentou usar aspas '' em vez de aspas? Eu tenho um arquivo .desktop personalizado com espaços na linha Exec e o meu funciona com aspas ''.

Henry Gibson
fonte
3

Eu tenho o mesmo problema ao seguir as instruções de instalação do site ( http://monkeyhacks.com/post/how-to-install-sublime-text-2-on-ubuntu-14-04 ) .. Então, minha solução foi :

  1. Remova / exclua o link virtual chamado "sublime" de /usr/bin

  2. Remova todos os espaços em branco da pasta "Sublime Text 2" renomeando-a para "SublimeText2"

  3. Re Crie um link virtual em /usr/bin/:

    sudo ln -s /opt/SublimeText2/sublime_text /usr/bin/sublime
    
  4. Crie o arquivo .desktop, incluindo:

    Exec=/opt/SublimeText2/sublime_text %U
    Icon=/opt/SublimeText2/Icon/48x48/sublime_text.png
    
SantyVillagomez
fonte
0

Encontrei o mesmo problema usando o GNOME nautilus 3.4.2 no Ubuntu 12.04. Eu encontrei essa solução alternativa em um relatório de bug para o mesmo problema no Moblin UI Framework, que eu prefiro ao mencionado, onde você precisa adicionar todas as pastas ao $ PATH.

A solução alternativa é simplesmente:
"Crie um link simbólico em um caminho que não tenha espaços e aponte o campo EXEC para esse link".

Björn
fonte
-1

Os arquivos .desktop não manipulam aspas, espaços e caracteres de escape da mesma maneira que os shells. Provavelmente, a melhor opção seria chamar um shell em sua linha de exec para obter o comportamento esperado, assim:

[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

Para mais informações, consulte man sh. Isso também evita ter que criar e manter links simbólicos, como você fará com as outras respostas.

KDØBPV
fonte
Esta solução não passa argumentos, por exemplo, caminhos de arquivo, para o comando finalmente chamado. -1
David Foerster 03/03
Hã. Aparentemente, também não é confiável. Testei esta solução antes de publicá-la e funcionou. Mas então modifiquei meu teste para verificar se você estava certo, e agora NÃO está funcionando, mesmo depois de restaurá-lo como estava funcionando. Esquisito.
KDØBPV 03/0318