우분투의“Open With”목록에 복잡한 런처 추가하기


0

연결 프로그램 목록에 넣고 싶은 복잡한 바로 가기 / 실행기가 있습니다. 바로 가기는 명령을 사용합니다

screen -d -m bash -c "screen;source /home/me/intel/bin/compilervars.sh intel64;/home/me/QtCreator/QtCreator2.8.1-gcc/bin/qtcreator"

인텔 컴파일러를위한 스크립트를 실행해야하기 때문에 복잡합니다. 명령을 다음과 같이 변경하려고했습니다.

screen -d -m bash -c "screen;source /home/me/intel/bin/compilervars.sh intel64;/home/me/QtCreator/QtCreator2.8.1-gcc/bin/qtcreator %F"

그런 다음 QtCreator.desktop 파일을 / use / share / applications /에 복사했지만 작동하지 않았습니다.

어떻게해야합니까? 나는 이것에 대한 많은 자습서를 읽었지만이 이상한 런처 명령에 특별한 경우가 있다고 생각합니다.

감사.

답변:


2

해결책

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 명령 문자열의 시작 부분에 있습니까? 내가 착각하지 않으면 필요하지 않습니다.

ExecQtCreator가 없기 때문에 다음 명령 으로 성공적으로 테스트했다고 언급해야 합니다.

screen -d -m bash -c "libreoffice --writer \"\$@\"" dummy %F

설명

여기에 관련된 많은 "레이어"때문에 약간 까다 롭습니다.

  1. 런처에서 QtCreator로 인수를 올바르게 전달하십시오.
  2. 인용문을 올바르게 작성하십시오.

첫 번째 문제부터 시작하자 : 런처 %FExec명령 에서 인수 (즉, 인용 부호) 내에서 사용할 수 없습니다. 이 스펙 페이지의 마지막 행을 참조하십시오 .

% F 및 % U 필드 코드는 자체적으로 인수로만 사용될 수 있습니다.

따라서 런처 인수 (즉, %F)를 가장 "layer"에 인수로 사용해야합니다 . 그러나 당신은 그것들을 작은 bash 명령으로 만들고 싶어합니다. 운 좋게도 bash는 첫 번째 인수 뒤에 모든 인수 -c를 위치 매개 변수로 사용합니다. 불행하게도, 배쉬는 사용, 0, 즉 그 번호를 시작 $0, $1, $2당신은 단지 그들 모두에 액세스 할 수 있도록 등, $@첫 번째 (놓칠 때문에 스크립트 내에서 $0다음) 인수를. 그렇기 때문에 dummy인수를 추가했습니다 . 항상 $0우리의 경우에는 사용되지 않습니다. 모든 실제 인수 (예 :) %F는 완전히로 전달됩니다 $@.

우리는 첫 번째 문제를 해결했습니다. 모든 명령 줄 인수를 실행기에서 작은 bash 명령으로 가져 왔습니다.

이제 인용 문제가 있습니다. bash 명령 주위의 큰 따옴표는 실행기에 의해 해석됩니다. 이러한 인용문 사이의 모든 것은 결과적으로 데스크탑 엔트리 사양 을 준수해야 합니다 . 일반 bash 스크립트에서 (단축 된) 호출은 다음과 같습니다.

qtcreator "$@"

각 인수는 공백을 포함 할 수 있으므로 $@변수 를 인용해야 합니다. 이제 Exec주요 사양에서는 큰 따옴표 안에 사용될 경우 큰 따옴표와 달러 기호를 인용해야합니다. 이것이 우리가하는 일입니다. 두 번째 문제도 해결되었습니다.


당신은 최고입니다 :)
양자 물리학 자
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.