我正在尝试为 Minecraft 制作一个 .desktop 文件。执行该文件时似乎没有发生任何事情。我尝试按如下方式分配 Exec 键:
Exec= java -jar "~/.minecraft/Minecraft.jar"
Exec= java -jar "$HOME/.minecraft/Minecraft.jar"
但我不确定如何正确输入保留字符(~ 和 $)。根据 Freedesktop 的桌面入门规格:
如果参数包含保留字符,则必须用引号引起来。
和
必须通过将参数括在双引号之间并通过在其前面添加一个反斜杠字符来转义双引号字符、反引号字符 ("`")、美元符号 ("$") 和反斜杠字符 ("\") 来完成引用。在扩展字段代码之前以及将参数传递给可执行程序之前,实现必须撤消引用。
但这让我很困惑。
答案1
这似乎是执行的常见解决方法sh
,它将正确解析特殊符号和变量:
Exec=sh -c "java -jar ~/.minecraft/Minecraft.jar"
答案2
在您的 .desktop 文件中写入:
Exec=sh -c 'java -jar "$HOME"/.minecraft/Minecraft.jar'
样本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'
解释:
所有术语,如双引号、引用、元字符(如 $ 和 ~)始终与 shell 相关 - shell(命令解释器,如 bash 或 dash)(顺便说一句)独立于任何终端(如 xterm)。
当您希望将波形符或 shell-var $HOME 扩展为某物时。就像 /home/myloginname 一样,这只能通过 /bin/bash 或 /bin/sh (==/bin/dash) 来完成。
xdg-desktop-interpreter 的 Exec-line 需要一个真实的程序(bin 文件的路径),并且永远不会直接扩展任何 shell 内容,而是通过为 sh 命令提供选项 -c 'command-string ; cmd...; cmd...' 一切都应该正常工作。
%u 是一个“xdg-占位符”并独立更改为 DnD-URL(在执行 shell 命令行之前)
- 请注意,您可以使用 # ... 注释掉 .desktop 文件中的行。
附:
! case coproc do done elif else esac fi for function if in select
then until while { } time [[ ]]
都是“保留字”(不要将其与 shell 的内置命令混淆),但是 ~ 和 $ 是元字符(波浪线必须不加引号才能展开,而 $MYVAR 可以加引号,如果它在路径中包含空格)
亲切的问候 末梢血