Marca de tiempo en Exec = ¿es posible la línea del archivo .desktop?

11

Lubuntu 16.04 - sesión de Openbox

Puedo usar el terminal para abrir un archivo con marca de tiempo con gedit:

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

El comando también se puede usar a través de un atajo de teclado en 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>

Pero no puedo hacer lo mismo a través de la Exec=línea de un .desktoparchivo.

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

solo crea un archivo llamado ~/.txt

Entonces, ¿cómo consigo un archivo .desktop para hacer lo que quiero?

DK Bose
fuente
1
No creo que el archivo .desktop pueda llamar a $()comandos de sub-shell como ese. Creo que lo necesita para llamar a otro script que contiene su comando de sub-shell para abrir su archivo.
Terrance
Claro que haré eso. =)
Terrance
1
Los archivos HI @DKBose .desktop pueden ejecutar sub shells, ya que Exec=/bin/bash -c "echo $(date) > ~/out.txt"funciona bien. El +%Y%m%d%H%M%Sparece ser el problema. Todavía lo estoy masticando.
Jacob Vlijm
Supongo que lo primero no funciona porque% ya se usa como argumentos de línea de comandos para exec en archivos .desktop. Es posible escapar de ellos de alguna manera, pero la otra solución parece estar bien. Hubiera agregado esto como un comentario, pero mi cuenta aquí es nueva.
Mikael Kjær
1
Hola @DKBose, mira mi respuesta :)
Jacob Vlijm

Respuestas:

10

Desafortunadamente, los archivos .desktop no siempre llaman a $()comandos de sub-shell de la manera que nos gustaría que lo hicieran . Una forma de hacer esto que he encontrado sería crear otro script que contenga el comando sub-shell para abrir el archivo de esa manera.

La Execlínea se vería así:

Exec=/path/to/script

entonces su archivo de script contendría el comando para abrir su nuevo archivo:

#!/bin/sh

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

el script también debería ser ejecutable:

chmod +x /path/to/script

¡Espero que esto ayude!

Terrance
fuente
@JacobVlijm ¿Es el problema similar a lo que uno ve en crondonde ciertos caracteres ( %?) Necesitan ser eliminados?
DK Bose
@DKBose Podría muy bien, todavía estoy jugando con eso, y creo que debería funcionar. Las subcapas por sí solas no son un problema.
Jacob Vlijm
@JacobVlijm Probablemente tengas razón. He descubierto que me gusta evitar los comandos de sub-shell dentro de archivos como estos, al igual que en el sources.listarchivo de apt no se puede reemplazar el nombre de la versión, $(lsb_release -sc)ya que tampoco funciona. Si lo resuelves, me encantaría ver cómo lo hiciste. :)
Terrance
Hola Terrance, funciona! Ver mi respuesta ...
Jacob Vlijm
@JacobVlijm intente usar, +\%Y\%m\%d\%H\%M\%Sentonces debería funcionar.
Videonauth
8

La cuestión

Un guión no es necesario.

El problema no es que un .desktoparchivo no pueda ejecutar comandos con subcapas, ya que

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

funciona perfectamente bien en un .desktoparchivo.

Jugueteando con el comando, llegué a la conclusión de que el %personaje está causando el problema. Sin embargo, no tengo ninguna explicación, y hasta ahora no pude encontrar información sobre cómo resolverlo o escapar de eso.

Por lo tanto, fui a buscar un comando para obtener el tiempo sin usar el personaje sospechoso.

Alternativamente, use Ruby para la fecha y hora

Esto me lleva a Ruby, que produce la fecha y hora actual del comando:

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

Cuando editamos un poco la salida awk, eliminando espacios y delimitadores, tenemos justo lo que queremos y un comando de trabajo en el .desktoparchivo, ya que no usamos %:

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


ingrese la descripción de la imagen aquí

¡Nota!

Sin duda, el comando se puede "encantar" un poco, probablemente editaré la respuesta un poco hoy o mañana.

Jacob Vlijm
fuente
¡Agradable! Esta es definitivamente otra forma de hacerlo. No tenía instalado Ruby, pero una vez que está instalado, definitivamente funciona. Estoy de acuerdo en que jugar con esto podría hacer que se vea como quiere que sea. :)
Terrance
@Terrance resulta ser una pregunta interesante. Nunca me encontré con un problema en .desktoparchivos como este antes ...
Jacob Vlijm
Yo tampoco. Es bueno saberlo, y he descubierto que respondiendo preguntas como estas muchas veces también aprendemos mucho. :)
Terrance
1
@Terrance 99% de lo que sé que aprendí al responder preguntas :)
Jacob Vlijm
1
Me inspiraste a cambiar mi redacción en mi respuesta también. Cambié la mía para que sea unidireccional en lugar de la mejor. Y otros cambios similares para que la gente no piense que es la única forma. ¡Gracias! :)
Terrance