Como eu escrevo um comando para a chave Exec em um arquivo .desktop contendo um caractere reservado corretamente?

3

Estou tentando criar um arquivo .desktop para o Minecraft. Nada parece acontecer ao executar o arquivo. Eu tentei atribuir a chave Exec da seguinte forma:

Exec= java -jar "~/.minecraft/Minecraft.jar"

Exec= java -jar "$HOME/.minecraft/Minecraft.jar"

Mas não sei como colocar os caracteres reservados (~ e $) corretamente. De acordo com a especificação de entrada na área de trabalho do Freedesktop:

If an argument contains a reserved character the argument must be quoted.

e

Quoting must be done by enclosing the argument between double quotes and escaping the double quote character, backtick character ("'"), dollar sign ("$") and backslash character ("\") by preceding it with an additional backslash character. Implementations must undo quoting before expanding field codes and before passing the argument to the executable program.

Mas isso é muito confuso para mim.

    
por reggie-man 20.12.2014 / 07:41

2 respostas

2

Parece uma solução comum para executar sh , que resolverá os símbolos e variáveis especiais corretamente:

Exec=sh -c "java -jar ~/.minecraft/Minecraft.jar"
    
por 20.12.2014 / 10:26
-2

No seu arquivo .desktop, escreva:

Exec=sh -c 'java -jar "$HOME"/.minecraft/Minecraft.jar'

Amostra 2:

Exec=sh -c "u=%u; k=%k; c=%c;"' kd="$k"; [ -f "$kd" ] && kd='dirname "$k"'; cd "$kd"; uxterm -bg blue -fg cyan3 -fn 9x15'

Explicação:

  • Todos os termos como aspas duplas, citações, meta-chars (como $ e ~) são sempre O shell (interpretador de comandos como bash ou dash) é (a propósito) independente de qualquer terminal (como xterm).

  • Quando você quiser que o til ou o shell-var $ HOME seja EXPANDIDO para sth. como / home / myloginname isso só pode ser feito por / bin / bash ou / bin / sh (== / bin / dash).

  • A linha Exec do xdg-desktop-interpreter precisa de um programa real (path-to-bin-file) e nunca expandirá qualquer shell-stuff diretamente, mas fornecendo o comando sh com a opção -c 'string de comando; cmd ...; cmd ... 'tudo deve funcionar bem.

  • % u é um "xdg-placeholder" e é alterado para DnD-URL de forma independente (antes que a linha de comando do shell seja executada)

  • Observe que você pode comentar linhas em um arquivo .desktop com # ...

P.S .:

! case   coproc   do  done elif else esac fi for function if in select
then until while { } time [[ ]]

são todas "palavras reservadas" (não confunda isso com os cmds embutidos do shell), mas ~ e $ são meta-chars (o til deve ser desclassificado para ser expandido, enquanto $ MYVAR pode ser citado, se contiver Espaços dentro de um caminho)

cumprimentos EOF

    
por 20.12.2014 / 10:49