Временная метка в Exec = строка файла .desktop возможна?

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 может вызывать $()подобные команды. Я думаю, что вам нужно вызвать другой скрипт, который содержит команду sub-shell для открытия вашего файла.
Терренс
Конечно, я сделаю это. =)
Терренс
1
HI @DKBose .desktop файлы могут запускать вложенные оболочки, так как Exec=/bin/bash -c "echo $(date) > ~/out.txt"работает нормально. +%Y%m%d%H%M%Sкажется проблема. все еще жует это.
Джейкоб Влейм
Я предполагаю, что первое не работает, потому что% уже используется в качестве аргументов командной строки для exec в файлах .desktop. Возможно, можно как-то их избежать, но другое решение кажется правильным. Я бы добавил это как комментарий, но мой аккаунт здесь новый.
Микаэль Къер
1
Привет @DKBose смотри мой ответ :)
Джейкоб Влейм

Ответы:

10

К сожалению, файлы .desktop не всегда вызывают команды sub-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когда %необходимо экскавировать определенные символы ( ?)?
ДК Бозе
@DKBose Может быть, я все еще возлюсь с этим и думаю, что это должно сработать. Одни только оболочки не являются проблемой.
Джейкоб Влейм
@JacobVlijm Вы, вероятно, правы. Я обнаружил, что мне нравится избегать команд вложенной оболочки в файлах, подобных этим, так же, как в sources.listфайле apt, вы не можете заменить название релиза, так $(lsb_release -sc)как это тоже не работает. Если вы поймете это, я хотел бы посмотреть, как вы это сделали. :)
Терренс
Привет Терранс, это работает! Смотрите мой ответ ...
Джейкоб Влейм
@JacobVlijm попробуйте использовать, +\%Y\%m\%d\%H\%M\%Sтогда это должно работать.
Видеонавт
8

Проблема

Скрипт не нужен.

Проблема не в том, что .desktopфайл не может запускать команды с подоболочками, так как

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, оказывается, интересный вопрос. Никогда .desktopраньше не сталкивался с проблемой в таких файлах ...
Джейкоб Влейм
И я нет. Полезно знать, и я обнаружил, что, отвечая на подобные вопросы, мы много раз узнаем и сами. :)
Терранс
1
@Terrance 99% того, что я знаю, я узнал, отвечая на вопросы :)
Джейкоб Влейм
1
Вы вдохновили меня изменить мою формулировку и в моем ответе. Я изменил мой, чтобы быть одним путем, а не лучшим способом. И другие подобные изменения, чтобы люди не думали, что это единственный путь. Спасибо! :)
Терренс