Мітка часу в 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-файл може викликати такі підкомандні $()команди. Я думаю, вам це потрібно для виклику іншого скрипту, який містить вашу команду під оболонки для відкриття вашого файлу.
Терранс

Звичайно, я це зроблю. =)
Терранс

1
Файли HI @DKBose .desktop можуть запускати під оболонки, оскільки Exec=/bin/bash -c "echo $(date) > ~/out.txt"працює нормально. +%Y%m%d%H%M%Sздається проблема. все ще жуючи це.
Яків Влійм

Я припускаю, що перше не працює, оскільки% вже використовується як аргументи командного рядка для exec у файлах .desktop Можливо, якимось чином уникнути їх, але інше рішення здається нормальним. Я б додав це як коментар, але мій обліковий запис тут новий.
Mikael Kjær

1
Привіт @DKBose дивіться мою відповідь :)
Яків Влійм

Відповіді:


10

На жаль, .desktop-файли не завжди викликають $()команди під-оболонки так, як ми хотіли б. Один із способів зробити це, який я знайшов, - це створити інший скрипт, який містить команду під оболонки, щоб відкрити такий файл.

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то це має працювати.
Videonauth

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, але як тільки він встановлений, це безумовно працює. Я погоджуюся, що, поводячись із цим, ви могли б змусити його виглядати так, як ви хочете. :)
Терранс

@Терранс виявляється цікавим питанням. Ніколи не .desktop
стикався

Я теж ні. Це добре знати, і я виявив, що, відповідаючи на такі запитання, багато разів ми багато чому вчимось і самі. :)
Терранс

1
@Терранс 99% того, що я знаю, я дізнався, відповідаючи на запитання :)
Яків Влійм

1
Ви надихнули мене змінити формулювання у своїй відповіді. Я змінив шахту на один спосіб замість найкращого. І інші такі зміни, щоб люди не думали, що це єдиний шлях. Дякую! :)
Терранс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.