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

DK *_*ose 11 bash .desktop

Lubuntu 16.04 - Openbox 会话

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

gedit ~/$(date +%Y%m%d%H%M%S).txt
Run Code Online (Sandbox Code Playgroud)

该命令也可以通过 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>
Run Code Online (Sandbox Code Playgroud)

但是我不能通过文件Exec=行做同样的事情.desktop

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

只创建一个名为的文件 ~/.txt

那么我如何获得一个 .desktop 文件来做我想做的事?

Ter*_*nce 10

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

Exec行看起来像:

Exec=/path/to/script
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/sh

gedit ~/$(date +%Y%m%d%H%M%S).txt
Run Code Online (Sandbox Code Playgroud)

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

chmod +x /path/to/script
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


Jac*_*ijm 8

问题

不需要脚本。

问题不在于.desktop文件不能使用子 shell 运行命令,因为

Exec=/bin/bash -c "echo $(date) > ~/out.txt"
Run Code Online (Sandbox Code Playgroud)

.desktop文件中工作得很好。

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

因此,我去寻找一个命令来获取时间而不使用可疑字符。

或者使用 Ruby 作为日期和时间

这导致我Ruby从命令生成当前日期和时间:

$ ruby -e 'puts Time.now.inspect'
2016-05-29 16:12:36 +0200
Run Code Online (Sandbox Code Playgroud)

当我们使用 编辑输出时awk,删除空格和分隔符,我们得到了我们想要的东西,以及.desktop文件中的一个工作命令,因为我们不使用%

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

在此处输入图片说明

笔记!

毫无疑问,该命令可以“吸引”一点,我可能会在今天或明天稍微编辑答案。