web-dev-qa-db-fra.com

Horodatage dans Exec = ligne du fichier .desktop possible?

Lubuntu 16.04 - Session Openbox

Je peux utiliser le terminal pour ouvrir un fichier horodaté avec gedit:

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

La commande peut également être utilisée via un raccourci clavier dans 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>

Mais je ne peux pas faire la même chose via la ligne Exec= d'un fichier .desktop.

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

crée simplement un fichier nommé ~/.txt

Alors, comment puis-je obtenir un fichier .desktop pour faire ce que je veux?

11
DK Bose

Malheureusement, les fichiers .desktop n’appellent pas toujours les commandes sub-Shell $() comme nous le souhaiterions. Une façon de faire que j'ai trouvée serait de créer un autre script qui contiendrait la commande de sous-shell pour ouvrir le fichier comme ça.

La ligne Exec ressemblerait à ceci:

Exec=/path/to/script

alors votre fichier de script contiendrait la commande pour ouvrir votre nouveau fichier:

#!/bin/sh

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

le script devrait aussi être exécutable:

chmod +x /path/to/script

J'espère que cela t'aides!

10
Terrance

Le problème

Un script n'est pas nécessaire.

Le problème n’est pas qu’un fichier .desktop ne puisse pas exécuter de commandes avec des sous-shell, car

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

fonctionne parfaitement dans un fichier .desktop.

En jouant avec la commande, je suis arrivé à la conclusion que le caractère % était la cause du problème. Cependant, je n’ai aucune explication à ce sujet et, jusqu’à présent, je n’ai pas pu trouver d’information sur la façon de le résoudre ou d’y échapper.

Je suis donc allé chercher une commande pour obtenir le temps sans en utilisant le caractère suspect.

Vous pouvez également utiliser Ruby pour la date et l'heure.

Ceci m’amène à Ruby, qui produit la date et l’heure actuelles à partir de la commande:

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

Quand on édite un peu la sortie avec awk, en supprimant les espaces et les délimiteurs, on a juste ce qu'on veut, et une commande de travail dans le fichier .desktop, car nous n'utilisons pas %:

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


enter image description here

Remarque!

Aucun doute, la commande peut être "charmée" un peu, je vais probablement modifier la réponse un peu aujourd'hui ou demain.

8
Jacob Vlijm