返回

在 .desktop 文件中执行命令:如何指定当前目录

Linux

在当前目录中执行命令的 .desktop 文件

引言

在 Linux 系统中,.desktop 文件是用来创建应用程序快捷方式的。通常,这些命令会在系统路径中指定的目录中执行。然而,有时我们希望在 .desktop 文件所在的当前目录中执行命令。本文将详细介绍如何在 .desktop 文件中实现此功能。

修改 .desktop 文件

要指定在当前目录中执行命令,我们需要在 Exec 行中使用特殊的 %F 变量。%F 表示 .desktop 文件的路径。因此,我们将 Exec 行修改为:

Exec=bash -c 'cd %F && <command>; read' $PWD

在这个修改后的 Exec 行中,我们使用 bash -c 来创建一个子 shell。在子 shell 中,我们首先使用 cd 命令切换到 .desktop 文件所在的目录,然后执行命令,最后使用 read 命令暂停子 shell,等待用户输入以关闭终端。

示例

下面是一个示例 .desktop 文件,它将在当前目录中执行 node index.js 命令:

[Desktop Entry]
Type=Application
Name=MyApp
Exec=bash -c 'cd %F && node index.js; read' $PWD
Icon=myapp.png
Terminal=true
Categories=Development

其他技巧

  • 使用 xdg-open 命令: 为了提高可移植性,我们可以使用 xdg-open 命令来执行命令。xdg-open 会根据文件的类型自动选择合适的应用程序来打开文件。因此,我们可以将 Exec 行修改为:
Exec=xdg-open %F
  • 以 root 权限执行命令: 如果命令需要 root 权限,可以在 Exec 行前添加 sudo:
Exec=sudo xdg-open %F

常见问题解答

Q1:为什么我需要在 Exec 行中使用 bash -c?
A1:bash -c 允许我们在子 shell 中执行命令。这让我们可以在执行命令之前切换到当前目录。

Q2:%F 变量代表什么?
A2:%F 变量表示 .desktop 文件的路径。

Q3:我可以使用其他命令吗?
A3:可以,任何命令都可以用这种方法在当前目录中执行。

Q4:这适用于所有 Linux 发行版吗?
A4:此方法应该适用于大多数基于 GNOME 的 Linux 发行版。

Q5:如何指定多个命令?
A5:可以在 Exec 行中使用分号分隔多个命令。

结论

通过在 .desktop 文件中使用 %F 变量,我们可以在当前目录中轻松执行命令。这在许多情况下很有用,例如在脚本或应用程序的开发期间。通过遵循本指南中的步骤,你可以轻松创建在当前目录中执行命令的 .desktop 文件。