我在一个名为“createlauncher.desktop”的桌面文件中构建了一个小型启动器编辑器,它在文本编辑器中打开了第二个名为“SHORTCUT.desktop”的只读桌面启动器文件,其中可执行文件的路径和名称是已填写,启动器将保存到新位置。它主要使用 xdg-open,主要目标是 pdf 文件或其他目录。 xdg-open 部分工作正常。这样我就可以拥有 Windows 风格的快捷方式(桌面文件),而 Dropbox 不会像符号链接那样弄乱。
如果我指定只读桌面文件的完整路径,我可以使用启动器,但我必须在绝对路径上调用特定的文本编辑器才能使其工作。我希望它在同一目录中查找只读 .desktop 文件,无论它在哪里,这样安装就很简单,并且我希望它启动系统编辑器,即$VISUAL
设置的任何内容。当我从命令行启动它时,这里提供的启动器工作正常,dex -v createshortcut.desktop
但是当我通过单击它从 GUI (Cinnamon/nemo) 启动它时,它不会加载文本编辑器,但不会给出错误。当我启动使用时desktop-file-validate createshortcut.desktop
它会抛出错误
createshortcut.desktop: error: value "sh -c "exec $VISUAL $(dirname $0)\/SHORTCUT.desktop" %k" for key "Exec" in group "Desktop Entry" contains a non-escaped character '$' in a quote, but it should be escaped with two backslashes ("\\$")
3次。然后,我遍历并转义 的三个实例$
,然后错误消失,desktop-file-validate createshortcut.desktop
但 dex 不再正常启动编辑器,并且它仍然不会从桌面单击启动。
这是createlauncher.desktop
在编辑器中正确启动第二个 .desktop 文件的文件,但只能从命令行使用dex
:
#!/usr/bin/env xdg-open
[Desktop Entry]
Name=create shortcut
Exec=bash -c -e "exec $VISUAL $(dirname $0)\/SHORTCUT.desktop" %k
Icon=text-editor
Type=Application
Comment=SAVE AS!!!!!
Terminal=false
这是只读目标,正常工作时SHORTCUT.desktop
应该在编辑器中打开:$VISUAL
createlauncher.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=NAME
Exec=xdg-open "PATHTOFILE"
then Icon=/usr/share/icons/HighContrast/scalable/emblems/emblem-symbolic-link.svg
Terminal=false
Comment= (1) make NAME for target (2) enter full absolute PATHTOFILE of source (3) SAVE AS to the target directory
我的猜测是,bash 已经拾取了一些 ENV 变量,该变量不在从createlauncher.desktop
文件启动的交互式 bash 中,但此时我已经无法理解了。
是否有一个所有 shell 都能读取的“.bashrc”等效文件?似乎指向我的解决方案,但不确定。