Timestamp em Exec = linha de arquivo .desktop possível?

11

Lubuntu 16.04 - Sessão Openbox

Eu posso usar o terminal para abrir um arquivo com registro de data e hora com gedit :

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

O comando também pode ser usado através de um atalho de teclado no 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>

Mas não posso fazer o mesmo por meio da linha Exec= de um arquivo .desktop .

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

cria um arquivo chamado ~/.txt

Então, como faço para que um arquivo .desktop faça o que eu quero?

    
por DK Bose 29.05.2016 / 05:13

2 respostas

10

Infelizmente, os arquivos .desktop nem sempre chamam comandos sub-shell $() da maneira que gostaríamos que eles fizessem. Uma maneira de fazer isso que eu encontrei seria criar outro script que contenha o comando sub-shell para abrir o arquivo assim.

A linha Exec seria semelhante a:

Exec=/path/to/script

seu arquivo de script conterá o comando para abrir seu novo arquivo:

#!/bin/sh

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

o script também teria que ser executável:

chmod +x /path/to/script

Espero que isso ajude!

    
por Terrance 29.05.2016 / 05:47
8

O problema

Um script não é necessário.

O problema não é que um arquivo .desktop não possa executar comandos com subshells, já que

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

funciona perfeitamente em um arquivo .desktop .

Brincando com o comando, cheguei à conclusão de que o % -character está causando o problema. Não tenho explicação para isso, e até agora não consegui encontrar informações sobre como resolver ou escapar disso.

Por isso fui procurar um comando para obter o tempo sem usando o caractere suspeito.

Como alternativa, use o Ruby para a data & amp; tempo

Isso me leva a Ruby , que produz a data atual & amp; hora do comando:

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

Quando editamos a saída um pouco com awk , removendo espaços e delimitadores, temos exatamente o que queremos, e um comando de trabalho no .desktop arquivo, já que não usamos % :

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


Nota!

Sem dúvida, o comando pode ser "encantado" um pouco, eu provavelmente vou editar a resposta um pouco hoje ou amanhã.

    
por Jacob Vlijm 29.05.2016 / 16:17

Tags