Znacznik czasu w Exec = linia pliku .desktop jest możliwa?


11

Lubuntu 16.04 - Sesja Openbox

Mogę użyć terminala, aby otworzyć plik ze znacznikiem czasu gedit:

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

Polecenia można także użyć za pomocą skrótu klawiaturowego w 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>

Ale nie mogę zrobić tego samego za pomocą Exec=wiersza .desktoppliku.

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

po prostu tworzy plik o nazwie ~/.txt

Jak mogę uzyskać plik .desktop do robienia tego, co chcę?


1
Nie sądzę, aby plik .desktop mógł wywoływać $()takie polecenia podpowłoki . Myślę, że potrzebujesz go do wywołania innego skryptu zawierającego polecenie podpowłoki do otwierania pliku.
Terrance

Jasne, że to zrobię. =)
Terrance

1
Pliki .desktop HI @DKBose mogą uruchamiać podpowłoki, ponieważ Exec=/bin/bash -c "echo $(date) > ~/out.txt"działają dobrze. +%Y%m%d%H%M%Swydaje się być problemem. wciąż to przeżuję.
Jacob Vlijm

Zakładam, że pierwsza rzecz nie działa, ponieważ% jest już używane jako argumenty wiersza poleceń dla pliku exec w plikach .desktop Być może uda się je jakoś uciec, ale inne rozwiązanie wydaje się w porządku. Dodałbym to jako komentarz, ale moje konto tutaj jest nowe.
Mikael Kjær

1
Cześć @DKBose, zobacz moją odpowiedź :)
Jacob Vlijm

Odpowiedzi:


10

Niestety pliki .desktop nie zawsze wywołują $()polecenia podpowłoki w taki sposób, jak byśmy tego chcieli. Znalazłem jeden ze sposobów, aby to zrobić, tworząc inny skrypt, który zawiera polecenie podpowłoki, aby otworzyć taki plik.

ExecLinia będzie wyglądać następująco:

Exec=/path/to/script

wtedy plik skryptu zawierałby polecenie otwarcia nowego pliku:

#!/bin/sh

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

skrypt musiałby również być wykonywalny:

chmod +x /path/to/script

Mam nadzieję że to pomoże!


@JacobVlijm Czy problem jest podobny do tego, w cronktórym się widzi, gdzie %trzeba ukryć pewne znaki ( ?)?
DK Bose

@DKBose Może być bardzo dobrze, wciąż się nim bawię i myślę, że powinien działać. Same podpowłoki nie stanowią problemu.
Jacob Vlijm

@JacobVlijm Prawdopodobnie masz rację. Odkryłem, że lubię unikać poleceń podpowłoki w takich plikach, podobnie jak w sources.listpliku apt, którego nie można zastąpić nazwą wydania, $(lsb_release -sc)ponieważ to też nie działa. Jeśli to wymyślisz, chciałbym zobaczyć, jak to zrobiłeś. :)
Terrance

Cześć Terrance, działa! Zobacz moją odpowiedź ...
Jacob Vlijm

@JacobVlijm spróbuj użyć, +\%Y\%m\%d\%H\%M\%Sto powinno działać.
Videonauth

8

Problem

Skrypt nie jest konieczny.

Problemem nie jest to, że .desktopplik nie może uruchamiać poleceń z podpowłokami, ponieważ

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

działa idealnie dobrze w .desktoppliku.

Bawiąc się poleceniem, doszedłem do wniosku, że %przyczyną problemu jest znak -character. Nie mam jednak na to wytłumaczenia i do tej pory nie mogłem znaleźć informacji, jak to rozwiązać lub uciec.

Dlatego zacząłem szukać polecenia, aby uzyskać czas bez użycia podejrzanej postaci.

Alternatywnie użyj Ruby dla daty i godziny

To prowadzi mnie do Ruby, która tworzy bieżącą datę i godzinę z polecenia:

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

Kiedy trochę edytujemy dane wyjściowe awk, usuwając spacje i ograniczniki, mamy tylko to, czego chcemy, oraz działające polecenie w .desktoppliku, ponieważ nie używamy %:

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


wprowadź opis zdjęcia tutaj

Uwaga!

Bez wątpienia polecenie może być trochę „oczarowane”, prawdopodobnie zmienię odpowiedź dzisiaj lub jutro.


Miły! To zdecydowanie inny sposób na zrobienie tego. Nie miałem zainstalowanego Rubiego, ale po jego zainstalowaniu to na pewno działa. Zgadzam się, że majstrując przy tym, możesz sprawić, że będzie wyglądać tak, jak chcesz. :)
Terrance

@Terrance okazuje się być ciekawym pytaniem. Nigdy wcześniej nie natrafiłem na problem w .desktoptakich plikach ...
Jacob Vlijm

Ja też nie. Dobrze wiedzieć, a odpowiadając na takie pytania, wiele razy sami się uczymy. :)
Terrance

1
@Terrance 99% tego, co wiem, nauczyłem się, odpowiadając na pytania :)
Jacob Vlijm

1
Zainspirowałeś mnie do zmiany sformułowania również w mojej odpowiedzi. Zmieniłem mój na jeden sposób zamiast najlepszego. I inne takie zmiany, żeby ludzie nie myśleli, że to jedyny sposób. Dziękuję Ci! :)
Terrance
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.