.desktop 파일의 Exec = 줄에 타임 스탬프가 가능합니까?


11

루 분투 16.04-Openbox 세션

터미널을 사용하여 gedit다음 과 같이 타임 스탬프 파일을 열 수 있습니다 .

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

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>

그러나 파일 Exec=줄을 통해 똑같이 할 수는 없습니다 .desktop.

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

그냥라는 파일을 만듭니다 ~/.txt

그렇다면 원하는 것을 수행하기 위해 .desktop 파일을 어떻게 얻습니까?


1
.desktop 파일이 $()이와 같은 하위 셸 명령을 호출 할 수 있다고 생각하지 않습니다 . 파일을 열기 위해 하위 쉘 명령이 포함 된 다른 스크립트를 호출해야한다고 생각합니다.
Terrance

물론 그렇게 할 것입니다. =)
Terrance

1
HI @DKBose .desktop 파일 제대로 실행되기 때문에 하위 셸을 실행할 수 있습니다Exec=/bin/bash -c "echo $(date) > ~/out.txt" . 는 +%Y%m%d%H%M%S문제가 될 것으로 보인다. 아직도 씹고 있어요
Jacob Vlijm

%는 이미 .desktop 파일의 exec에 대한 명령 줄 인수로 사용되기 때문에 첫 번째 작업이 작동하지 않는다고 가정 합니다. 어쨌든 벗어날 수는 있지만 다른 솔루션은 괜찮은 것처럼 보입니다. 나는 이것을 주석으로 추가했을 것이지만 여기의 내 계정은 새로운 것입니다.
Mikael Kjær

1
안녕 @ DKBose 내 대답을 참조하십시오 :)
Jacob Vlijm

답변:


10

불행히도 .desktop 파일은 항상 $()원하는 방식으로 하위 셸 명령을 호출하지 않습니다 . 내가 찾은 이것을 수행하는 한 가지 방법은 서브 쉘 명령을 포함하는 다른 스크립트를 작성하여 파일을 여는 것입니다.

Exec라인과 같을 것이다 :

Exec=/path/to/script

그러면 스크립트 파일에 새 파일을 여는 명령이 포함됩니다.

#!/bin/sh

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

스크립트는 실행 가능해야합니다.

chmod +x /path/to/script

도움이 되었기를 바랍니다!


@JacobVlijm cron특정 문자 ( %?)를 제거해야하는 경우 와 비슷한 문제 입니까?
DK Bose

@DKBose 아주 잘 될지도 모르겠지만, 여전히 그것을 둘러보고 있으며 작동해야한다고 생각합니다. 서브 쉘만으로는 문제가되지 않습니다.
Jacob Vlijm

@JacobVlijm 아마 맞을 것입니다. sources.listapt 파일과 $(lsb_release -sc)마찬가지로 릴리스 이름을 작동하지 않는 것으로 바꿀 수없는 것과 같은 파일 내에서 하위 쉘 명령을 피하고 싶다는 것을 알았습니다 . 당신이 그것을 알아 내면, 나는 당신이 어떻게했는지보고 싶습니다. :)
Terrance

안녕하세요 Terrance, 작동합니다! 내 대답보기 ...
Jacob Vlijm

@JacobVlijm 사용 +\%Y\%m\%d\%H\%M\%S하면 작동합니다.
Videonauth

8

문제

스크립트는 필요하지 않습니다.

문제는 .desktop파일이 서브 쉘로 명령을 실행할 수 없다는 것이 아닙니다.

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

.desktop파일 에서 완벽하게 작동 합니다.

명령을 사용하여- %문자가 문제를 일으키는 것으로 결론을 내 렸습니다 . 나는 그것에 대해 설명하지 않았으며, 지금까지 그것을 해결하거나 탈출하는 방법에 대한 정보를 찾을 수 없었습니다.

따라서 의심스러운 캐릭터 사용 하지 않고 시간을 얻는 명령을 찾고있었습니다 .

또는 날짜 및 시간에 Ruby를 사용하십시오.

이로 인해 Ruby명령으로 현재 날짜 및 시간을 생성합니다.

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

우리는 출력을 가진 비트 편집 할 때 awk제거 공간과 구분 기호를, 우리는 우리가 원하는 단지 무엇을 가지고, 그리고 에서 작업 명령을 .desktop우리가 사용하지 않기 때문에, 파일 %:

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


여기에 이미지 설명을 입력하십시오

노트!

의심 할 여지없이, 명령이 약간 "매혹"될 수 있습니다. 아마도 오늘이나 내일 조금 대답을 편집 할 것입니다.


좋은! 이것은 분명히 다른 방법입니다. 루비를 설치하지 않았지만 일단 설치되면 분명히 작동합니다. 나는 이것을 다루는 것이 당신이 원하는 방식으로 보일 수 있음에 동의합니다. :)
Terrance

@Terrance 그것은 흥미로운 질문으로 판명되었습니다. .desktop이전에 이와 같은 파일 에서 문제가 발생하지
않았습니다

나도 마찬가지야 아는 것이 좋으며, 이런 질문에 여러 번 대답하면 우리도 많은 것을 배우게됩니다. :)
Terrance

1
@Terrance 제가 알고있는 질문의 99 % : :
Jacob Vlijm

1
당신도 저의 대답에서 내 말을 바꾸라고 영감을주었습니다. 나는 최선의 방법 대신에 한 가지 방법으로 나의 것을 바꿨다. 그리고 다른 변화는 사람들이 유일한 방법이라고 생각하지 않습니다. 감사합니다! :)
Terrance
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.