Zeitstempel in Exec = Zeile der .desktop-Datei möglich?

11

Lubuntu 16.04 - Openbox-Sitzung

Ich kann das Terminal verwenden, um eine Datei mit Zeitstempel zu öffnen mit gedit:

gedit ~/$(date +%Y%m%d%H%M%S).txt

Der Befehl kann auch über eine Tastenkombination in Openbox verwendet werden.

<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>

Aber ich kann nicht dasselbe über die Exec=Zeile einer .desktopDatei tun .

Exec=sh -c 'gedit ~/$(date +%Y%m%d%H%M%S).txt'

erstellt einfach eine Datei namens ~/.txt

Wie kann ich eine .desktop-Datei dazu bringen, das zu tun, was ich will?

DK Bose
quelle
1
Ich glaube nicht, dass die .desktop-Datei solche Sub-Shell- $()Befehle aufrufen kann . Ich denke, Sie brauchen es, um ein anderes Skript aufzurufen, das Ihren Sub-Shell-Befehl zum Öffnen Ihrer Datei enthält.
Terrance
Klar werde ich das machen. =)
Terrance
1
HI @DKBose .desktop-Dateien können Sub-Shells ausführen, da sie einwandfrei ausgeführt werden Exec=/bin/bash -c "echo $(date) > ~/out.txt". das +%Y%m%d%H%M%Sscheint das Problem zu sein. kaute immer noch darauf.
Jacob Vlijm
Ich gehe davon aus, dass das Erste nicht funktioniert, da% bereits als Befehlszeilenargumente für exec in .desktop-Dateien verwendet wird. Es ist möglicherweise möglich, sie irgendwie zu umgehen, aber die andere Lösung scheint in Ordnung zu sein. Ich hätte dies als Kommentar hinzugefügt, aber mein Konto hier ist neu.
Mikael Kjær
1
Hallo @DKBose siehe meine Antwort :)
Jacob Vlijm

Antworten:

10

Leider rufen .desktop-Dateien Sub-Shell- $()Befehle nicht immer so auf, wie wir es möchten. Eine Möglichkeit, dies zu tun, besteht darin, ein anderes Skript zu erstellen, das den Sub-Shell-Befehl enthält, um die Datei so zu öffnen.

Die ExecLinie würde aussehen wie:

Exec=/path/to/script

dann würde Ihre Skriptdatei den Befehl zum Öffnen Ihrer neuen Datei enthalten:

#!/bin/sh

gedit ~/$(date +%Y%m%d%H%M%S).txt

Das Skript müsste auch ausführbar sein:

chmod +x /path/to/script

Hoffe das hilft!

Terrance
quelle
@JacobVlijm Ist das Problem ähnlich dem, was man sieht, cronwenn bestimmte Zeichen ( %?) Esacped werden müssen?
DK Bose
@DKBose Könnte sehr gut sein, ich spiele immer noch damit herum und ich denke, es sollte funktionieren. Subshells allein sind kein Problem.
Jacob Vlijm
@JacobVlijm Sie sind wahrscheinlich richtig. Ich habe festgestellt, dass ich die Sub-Shell-Befehle in Dateien wie diesen gerne vermeiden möchte, ähnlich wie in der sources.listDatei von apt, durch die Sie den Versionsnamen nicht ersetzen können, $(lsb_release -sc)da dies auch nicht funktioniert. Wenn Sie es herausfinden, würde ich gerne sehen, wie Sie es getan haben. :)
Terrance
Hallo Terrance, es funktioniert! Siehe meine Antwort ...
Jacob Vlijm
@JacobVlijm versuchen, +\%Y\%m\%d\%H\%M\%Sdann sollte es funktionieren.
Videonauth
8

Die Angelegenheit

Ein Skript ist nicht erforderlich.

Das Problem ist nicht, dass eine .desktopDatei keine Befehle mit Subshells ausführen kann, da

Exec=/bin/bash -c "echo $(date) > ~/out.txt"

funktioniert einwandfrei in einer .desktopDatei.

Ich spielte mit dem Befehl herum und kam zu dem Schluss, dass das %Zeichen das Problem verursacht. Ich habe jedoch keine Erklärung dafür und konnte bisher keine Informationen darüber finden, wie ich das lösen oder entkommen kann.

Ich suchte daher nach einem Befehl, um die Zeit zu ermitteln, ohne den verdächtigen Charakter zu verwenden.

Alternativ können Sie Ruby für Datum und Uhrzeit verwenden

Dies führte mich zu Rubydem aktuellen Datum und der aktuellen Uhrzeit aus dem Befehl:

$ ruby -e 'puts Time.now.inspect'
2016-05-29 16:12:36 +0200

Wenn wir die Ausgabe ein wenig bearbeiten awk, Leerzeichen und Trennzeichen entfernen, haben wir genau das, was wir wollen, und einen Arbeitsbefehl in der .desktopDatei, da wir nicht verwenden %:

Exec=/bin/bash -c  "gedit ~/$(ruby -e 'puts Time.now.inspect' | awk -F'[: -]' '{print $1$2$3$4$5$6}')"


Geben Sie hier die Bildbeschreibung ein

Hinweis!

Kein Zweifel, der Befehl kann ein bisschen "verzaubert" werden, ich werde die Antwort wahrscheinlich heute oder morgen ein bisschen bearbeiten.

Jacob Vlijm
quelle
Nett! Dies ist definitiv ein anderer Weg, dies zu tun. Ich hatte Ruby nicht installiert, aber sobald es installiert ist, funktioniert dies definitiv. Ich bin damit einverstanden, dass Sie damit herumspielen können, dass es so aussieht, wie Sie es möchten. :)
Terrance
@Terrance stellt sich als interessante Frage heraus. Noch nie zuvor in .desktop
solchen
Ich auch nicht. Es ist gut zu wissen, und ich habe festgestellt, dass wir bei der Beantwortung solcher Fragen oft auch selbst viel lernen. :)
Terrance
1
@Terrance 99% von dem, was ich weiß, habe ich bei der Beantwortung von Fragen gelernt :)
Jacob Vlijm
1
Sie haben mich dazu inspiriert, meinen Wortlaut auch in meiner Antwort zu ändern. Ich habe meine in eine Richtung anstatt in die beste geändert. Und andere solche Änderungen, damit die Leute nicht glauben, dass dies der einzige Weg ist. Vielen Dank! :)
Terrance