예약된 문자가 포함된 .desktop 파일에 Exec 키 명령을 올바르게 작성하려면 어떻게 해야 합니까?

예약된 문자가 포함된 .desktop 파일에 Exec 키 명령을 올바르게 작성하려면 어떻게 해야 합니까?

Minecraft용 .desktop 파일을 만들려고 합니다. 파일이 실행될 때 아무 일도 일어나지 않는 것 같습니다. 다음과 같이 Exec 키를 할당해 보았습니다.

Exec= java -jar "~/.minecraft/Minecraft.jar"

Exec= java -jar "$HOME/.minecraft/Minecraft.jar"

그런데 예약문자(~, $)를 어떻게 입력해야 하는지 잘 모르겠습니다. Freedesktop에 따르면데스크탑 엔트리 사양:

매개변수에 예약된 문자가 포함되어 있으면 따옴표로 묶어야 합니다.

그리고

따옴표를 완성하려면 큰따옴표 문자, 백틱 문자("`"), 달러 기호("$") 및 백슬래시 문자("\")를 이스케이프해야 합니다. 구현에서는 필드 코드를 확장하기 전과 실행 프로그램에 인수를 전달하기 전에 참조를 취소해야 합니다.

그러나 이것이 나를 혼란스럽게 한다.

답변1

sh이것은 특수 기호와 변수를 올바르게 해결하는 일반적인 해결 방법인 것 같습니다 .

Exec=sh -c "java -jar ~/.minecraft/Minecraft.jar"

답변2

.desktop 파일에 다음을 작성하십시오.

Exec=sh -c 'java -jar "$HOME"/.minecraft/Minecraft.jar'

샘플 2:

Exec=sh -c "u=%u; k=%k; c=%c;"' kd="$k"; [ -f "$kd" ] && kd=`dirname "$k"`; cd "$kd"; uxterm -bg blue -fg cyan3 -fn 9x15'

설명하다:

  • 큰따옴표, 따옴표, $ 및 ~와 같은 메타 문자와 같은 모든 용어는 항상 쉘에 상대적입니다. 쉘(bash 또는 대시와 같은 명령 해석기)은 (btw) 모든 터미널(xterm과 같은)과 독립적입니다.

  • 물결표 또는 shell-var $HOME을 무언가로 확장하려는 경우. /home/myloginname과 마찬가지로 /bin/bash 또는 /bin/sh(==/bin/dash)를 통해서만 이 작업을 수행할 수 있습니다.

  • xdg-desktop-interpreter의 Exec 라인은 실제 프로그램(bin 파일 경로)을 예상하고 쉘 내용을 직접 확장하지 않지만 sh 명령 옵션 -c 'command-string... cmd.. .' 그러면 모든 것이 잘 작동할 것입니다.

  • %u는 "xdg-placeholder"이며 DnD-URL로 독립적으로 변경됩니다(셸 명령줄을 실행하기 전).

  • #...를 사용하여 .desktop 파일의 행을 주석 처리할 수 있습니다.

첨부된:

! case   coproc   do  done elif else esac fi for function if in select
then until while { } time [[ ]]

"예약어"(쉘의 내장 명령과 혼동하지 말 것)이지만 ~ 및 $는 메타 문자입니다(확장하려면 물결표를 인용 해제해야 하며 $MYVAR은 경로에 공백이 포함된 경우 인용할 수 있습니다).

친절한 안부 말초 혈액

관련 정보