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
因为这是第一个谷歌搜索结果,让我链接另一个更简单的答案:
简而言之:“freedesktop 标准规定文件类型参数使用 % 符号,但可以通过双 % 符号进行转义。”
因此,
Exec=gedit ~/$(date +%Y%m%d%H%M%S).txt
使用
Exec=gedit ~/$(date +%%Y%%m%%d%%H%%M%%S).txt