Временная метка в 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
Вы вдохновили меня изменить мою формулировку и в моем ответе. Я изменил мой, чтобы быть одним путем, а не лучшим способом. И другие подобные изменения, чтобы люди не думали, что это единственный путь. Спасибо! :)
Терренс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.