.desktop 文件的 Exec= 行中可能存在时间戳吗?

.desktop 文件的 Exec= 行中可能存在时间戳吗?

Lubuntu 16.04-Openbox 会话

我可以使用终端打开带有时间戳的文件gedit

gedit ~/$(date +%Y%m%d%H%M%S).txt

该命令也可以通过 Openbox 中的键盘快捷键使用。

<keybind key="W-4">        # gedit time-stamped file
  <action name="Execute"><command>sh -c 'gedit ~/$(date +%Y%m%d%H%M%S).txt'</command></action>
</keybind>

但我无法通过Exec=文件行执行相同操作.desktop

Exec=sh -c 'gedit ~/$(date +%Y%m%d%H%M%S).txt'

只需创建一个名为~/.txt

那么我如何让 .desktop 文件执行我想要的操作?

答案1

不幸的是,.desktop 文件并不总是$()以我们希望的方式调用子 shell 命令。我发现一种实现此目的的方法是创建另一个包含子 shell 命令的脚本,以便以这样的方式打开文件。

Exec行看起来如下:

Exec=/path/to/script

那么你的脚本文件将包含打开新文件的命令:

#!/bin/sh

gedit ~/$(date +%Y%m%d%H%M%S).txt

该脚本还必须是可执行的:

chmod +x /path/to/script

希望这可以帮助!

答案2

问题

不需要脚本。

问题不在于.desktop文件无法运行带有子 shell 的命令,因为

Exec=/bin/bash -c "echo $(date) > ~/out.txt"

在文件中运行良好.desktop

摆弄命令后,我得出结论,-character%导致了这个问题。但我对此没有任何解释,到目前为止,我找不到有关如何解决或避免该问题的信息。

因此我开始寻找一个命令来获取时间没有使用可疑字符。

或者使用 Ruby 来获取日期和时间

这让我想到了Ruby,它通过以下命令生成当前日期和时间:

$ ruby -e 'puts Time.now.inspect'
2016-05-29 16:12:36 +0200

当我们使用 稍微编辑输出时awk,删除空格和分隔符,我们得到了我们想要的,文件中的有效命令.desktop,因为我们不使用%

Exec=/bin/bash -c  "gedit ~/$(ruby -e 'puts Time.now.inspect' | awk -F'[: -]' '{print $1$2$3$4$5$6}')"

在此处输入图片描述

笔记!

毫无疑问,这个命令可以有点“迷人”,我可能会在今天或明天稍微编辑一下答案。

答案3

因为这是第一个谷歌搜索结果,让我链接另一个更简单的答案:

带有日期变量的 .desktop 文件不起作用

简而言之:“freedesktop 标准规定文件类型参数使用 % 符号,但可以通过双 % 符号进行转义。”

因此,

Exec=gedit ~/$(date +%Y%m%d%H%M%S).txt

使用

Exec=gedit ~/$(date +%%Y%%m%%d%%H%%M%%S).txt

相关内容