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


11

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 $()命令。我认为您需要它来调用另一个包含用于打开文件的sub-shell命令的脚本。
Terrance

当然可以。=)
Terrance

1
HI @DKBose .desktop文件可以运行子shell,因为它们Exec=/bin/bash -c "echo $(date) > ~/out.txt"运行良好。在+%Y%m%d%H%M%S似乎是问题。仍在咀嚼。
雅各布·弗利姆

我认为第一件事是行不通的,因为%已被用作.desktop文件中 exec的命令行参数。也许可以通过某种方式对其进行转义,但另一种解决方案似乎还可以。本来可以将此添加为评论,但是我的帐户是新的。
MikaelKjær's

1
嗨,@ DKBose看到我的回答了:)
雅各布·弗利姆

Answers:


10

不幸的是,.desktop文件并非总是$()以我们希望的方式调用子shell 命令。我发现执行此操作的一种方法是创建另一个包含sub-shell命令的脚本,以打开该文件。

Exec行如下所示:

Exec=/path/to/script

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

#!/bin/sh

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

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

chmod +x /path/to/script

希望这可以帮助!


@JacobVlijm问题类似于在需要保留cron某些字符(%?)时看到的问题吗?
DK Bose's

@DKBose可能很好,我仍然在摆弄它,我认为它应该可以工作。仅子外壳是没有问题的。
雅各布·弗利姆

@JacobVlijm您可能是正确的。我发现我喜欢避免在这些文件中使用sub-shell命令,就像在sources.listapt文件中一样,您不能用替换发行版名称,$(lsb_release -sc)因为这也不起作用。如果您能解决问题,我很想看看您是如何做到的。:)
Terrance

嗨Terrance,它有效!看到我的回答...
Jacob Vlijm '16

@JacobVlijm尝试使用,+\%Y\%m\%d\%H\%M\%S然后它应该工作。
Videonauth

8

问题

不需要脚本。

问题不是.desktop文件不能运行带有子shell的命令,因为

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

.desktop文件中工作正常。

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

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

或者使用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}')"


在此处输入图片说明

注意!

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


真好!这绝对是另一种方法。我没有安装Ruby,但是一旦安装,这肯定可以工作。我同意,随便摆弄一下就可以让它看起来像您想要的样子。:)
Terrance

@Terrance事实证明这是一个有趣的问题。.desktop以前从未在这样的文件中遇到问题...
Jacob Vlijm '16

我也不。很高兴知道,而且我发现回答此类问题的次数很多次,我们也从中学到了很多。:)
Terrance

1
@Terrance我知道我在回答问题时学到了99%的知识:)
Jacob Vlijm,2016年

1
您也启发了我也改变了我的回答。我改变了我的方式,而不是最好的方式。以及其他此类变化,因此人们认为这不是唯一的方法。谢谢!:)
Terrance
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.