해결책
Exec
데스크탑 항목 의 줄 값 은 다음과 같아야합니다.
screen -d -m bash -c "screen;source /home/me/intel/bin/compilervars.sh intel64;/home/me/QtCreator/QtCreator2.8.1-gcc/bin/qtcreator \"\$@\"" dummy %F
BTW : 왜 screen;
bash 명령 문자열의 시작 부분에 있습니까? 내가 착각하지 않으면 필요하지 않습니다.
Exec
QtCreator가 없기 때문에 다음 명령 으로 성공적으로 테스트했다고 언급해야 합니다.
screen -d -m bash -c "libreoffice --writer \"\$@\"" dummy %F
설명
여기에 관련된 많은 "레이어"때문에 약간 까다 롭습니다.
- 런처에서 QtCreator로 인수를 올바르게 전달하십시오.
- 인용문을 올바르게 작성하십시오.
첫 번째 문제부터 시작하자 : 런처 %F
의 Exec
명령 에서 인수 (즉, 인용 부호) 내에서 사용할 수 없습니다. 이 스펙 페이지의 마지막 행을 참조하십시오 .
% F 및 % U 필드 코드는 자체적으로 인수로만 사용될 수 있습니다.
따라서 런처 인수 (즉, %F
)를 가장 "layer"에 인수로 사용해야합니다 . 그러나 당신은 그것들을 작은 bash 명령으로 만들고 싶어합니다. 운 좋게도 bash는 첫 번째 인수 뒤에 모든 인수 -c
를 위치 매개 변수로 사용합니다. 불행하게도, 배쉬는 사용, 0, 즉 그 번호를 시작 $0
, $1
, $2
당신은 단지 그들 모두에 액세스 할 수 있도록 등, $@
첫 번째 (놓칠 때문에 스크립트 내에서 $0
다음) 인수를. 그렇기 때문에 dummy
인수를 추가했습니다 . 항상 $0
우리의 경우에는 사용되지 않습니다. 모든 실제 인수 (예 :) %F
는 완전히로 전달됩니다 $@
.
우리는 첫 번째 문제를 해결했습니다. 모든 명령 줄 인수를 실행기에서 작은 bash 명령으로 가져 왔습니다.
이제 인용 문제가 있습니다. bash 명령 주위의 큰 따옴표는 실행기에 의해 해석됩니다. 이러한 인용문 사이의 모든 것은 결과적으로 데스크탑 엔트리 사양 을 준수해야 합니다 . 일반 bash 스크립트에서 (단축 된) 호출은 다음과 같습니다.
qtcreator "$@"
각 인수는 공백을 포함 할 수 있으므로 $@
변수 를 인용해야 합니다. 이제 Exec
주요 사양에서는 큰 따옴표 안에 사용될 경우 큰 따옴표와 달러 기호를 인용해야합니다. 이것이 우리가하는 일입니다. 두 번째 문제도 해결되었습니다.