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)
希望这可以帮助!
不需要脚本。
问题不在于.desktop
文件不能使用子 shell 运行命令,因为
Exec=/bin/bash -c "echo $(date) > ~/out.txt"
Run Code Online (Sandbox Code Playgroud)
在.desktop
文件中工作得很好。
摆弄命令,我得出的结论是%
-character 导致了问题。不过,我对此没有任何解释,到目前为止,我找不到有关如何解决或逃避该问题的信息。
因此,我去寻找一个命令来获取时间而不使用可疑字符。
这导致我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)
毫无疑问,该命令可以“吸引”一点,我可能会在今天或明天稍微编辑答案。