Registro de data e hora no Exec = linha do arquivo .desktop possível?

11

Lubuntu 16.04 - Sessão Openbox

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 através da Exec=linha de um .desktoparquivo.

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

apenas cria um arquivo chamado ~/.txt

Então, como obtenho um arquivo .desktop para fazer o que eu quero?

DK Bose
fonte
1
Eu não acho que o arquivo .desktop possa chamar $()comandos sub-shell como esse. Eu acho que você precisa chamar outro script que contém seu comando sub-shell para abrir seu arquivo.
Terrance
Claro que vou fazer isso. =)
Terrance
1
Os arquivos .desktop do HI @DKBose podem executar subcascas , pois Exec=/bin/bash -c "echo $(date) > ~/out.txt"funcionam bem. o +%Y%m%d%H%M%Sparece ser o problema. ainda mastigando.
Jacob Vlijm
Suponho que a primeira coisa não funcione porque% já é usado como argumentos de linha de comando para exec em arquivos .desktop Pode ser possível escapar deles de alguma forma, mas a outra solução parece boa. Eu teria adicionado isso como um comentário, mas minha conta aqui é nova.
Mikael Kjær
1
Oi @DKBose ver minha resposta :)
Jacob Vlijm

Respostas:

10

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

A Execlinha ficaria assim:

Exec=/path/to/script

seu arquivo de script conteria 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 isto ajude!

Terrance
fonte
@JacobVlijm O problema é semelhante ao que se vê em cronque certos caracteres ( %?) Precisam ser explicados?
DK Bose
@DKBose Pode muito bem ser, ainda estou brincando com ele, e acho que deve funcionar. Subshells por si só não são problema.
Jacob Vlijm
@JacobVlijm Você provavelmente está correto. Eu descobri que gosto de evitar os comandos sub-shell em arquivos como esses, assim como no sources.listarquivo do apt, você não pode substituir o nome do release, $(lsb_release -sc)pois isso também não funciona. Se você descobrir, eu adoraria ver como você conseguiu. :)
Terrance
Oi Terrance, funciona! Veja minha resposta ...
Jacob Vlijm
@JacobVlijm tente usar, +\%Y\%m\%d\%H\%M\%Sentão ele deve funcionar.
Videonauth
8

O problema

Um script não é necessário.

O problema não é que um .desktoparquivo não possa executar comandos com subshells, pois

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

funciona perfeitamente bem em um .desktoparquivo.

Brincando com o comando, cheguei à conclusão de que o %caractere 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, procurei um comando para obter o tempo sem usar o personagem suspeito.

Como alternativa, use Ruby para a data e hora

Isso me levou a Ruby, que produz a data e hora atuais a partir do comando:

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

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

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


insira a descrição da imagem aqui

Nota!

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

Jacob Vlijm
fonte
Agradável! Esta é definitivamente outra maneira de fazer isso. Eu não tinha o Ruby instalado, mas uma vez instalado, isso definitivamente funciona. Concordo que, brincando com isso, você pode ter a aparência que deseja. :)
Terrance 29/05
@Terrance acaba por ser uma pergunta interessante. Nunca corri em um problema em .desktoparquivos como isso antes ...
Jacob Vlijm
Nem eu. É bom saber, e descobri que, respondendo a perguntas como essas muitas vezes, aprendemos muito também. :)
Terrance 29/05
1
@Terrance 99% do que eu sei aprendi em responder perguntas :)
Jacob Vlijm
1
Você me inspirou a mudar minha redação também na minha resposta. Mudei o meu para um caminho, em vez do melhor. E outras mudanças desse tipo, para que as pessoas não pensem que esse é o único caminho. Obrigado! :)
Terrance