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?
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!
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.
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}')"
Aucun doute, la commande peut être "charmée" un peu, je vais probablement modifier la réponse un peu aujourd'hui ou demain.