linux - 桌面文件不执行命令

标签 linux terminal mime-types uri-scheme

我有这个简单的命令来检查文件是否存在:

if [ -f /tmp/file.txt ] ; then echo "yes" ; else echo "no" ; fi

如果我直接在终端上运行它,它就可以工作(如果文件存在则显示“yes”,如果不存在则显示“no”)。但我想在 .desktop 文件中执行此命令,并将其用作 Exec 键的值:

[Desktop Entry]
Version=1.0
Type=Application
Exec=if [ -f /tmp/file.txt ] ; then echo "yes" ; else echo "no" ; fi
StartupNotify=true
Terminal=false
Categories=Utility;X-XFCE;X-Xfce-Toplevel;
MimeType=x-scheme-handler/custom
Name=Custom Test
Comment=Custom

如果我尝试执行xdg-open custom://,我会得到custom://: error opening location: The specified location is notsupported,但是如果我将Exec值更改为echo "yes"并执行xdg-open custom://,它会在终端上显示yes

我在这里缺少什么?

最佳答案

您正在尝试在不受支持的 .desktop 文件中执行 shell 脚本编码。

“echo yes”起作用的原因是.desktop执行echo命令时参数为“yes”,这是可以接受的。

.desktop 执行命令以及选项和参数。您可以在 .sh 文件中编写 shell 脚本代码,并在 Exec 中提及它或使用

运行代码
Exec=sh -c "if [ -f /tmp/file.txt ] ; then echo 'yes' ; else echo 'no' ; fi"

此处 .desktop 使用选项和参数执行“sh”

关于linux - 桌面文件不执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31789330/

相关文章:

linux - 如何使用 sudo 验证用户是否没有特定命令的密码权限?

terminal - 关于这些数字在 ConEmu 颜色设置中的确切含义是否有一些引用

html - M4V Mimetype - 视频/mp4 或视频/m4v?

c# - 我可以为具有相同扩展名(在同一文件夹中)的不同文件设置不同的 MIME 类型映射吗?

java - 如何通过Java程序了解平台

linux - 为什么我应该仅仅为了库更新而重新编译整个程序?

android - 如何使用终端运行特定的 Android 应用程序?

scala - scala解释器导致不可见文本时如何修复终端

android - Android 中 .srt 的 MIME 类型

linux - 以普通用户身份执行程序(同时是 root)