Решение
Значение 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
Кстати: почему у вас screen;
в начале вашей командной строки bash? Если я не ошибаюсь, в этом не должно быть необходимости.
Я должен также упомянуть, что я успешно проверил это с помощью следующей Exec
команды, потому что у меня здесь нет QtCreator:
screen -d -m bash -c "libreoffice --writer \"\$@\"" dummy %F
объяснение
Из-за множества «слоев», которые здесь задействованы, немного сложно
- правильно передать аргументы из панели запуска в QtCreator.
- получить правильное цитирование.
Давайте начнем с первой проблемы: вы не можете использовать %F
в аргументе (то есть в кавычках) Exec
команду запуска, смотрите последнюю строку этой страницы спецификации, которая гласит:
Коды полей% F и% U могут использоваться только в качестве аргумента самостоятельно.
Таким образом, вы обязательно должны иметь аргументы запуска (т. %F
Е.) В качестве аргументов на самом крайнем «слое». Но вы хотите включить их в команду bash. К счастью, bash использует все аргументы после первого аргумента для своей -c
опции в качестве позиционных параметров. К сожалению, Баш начинает нумеровать их от 0, то есть, он использует $0
, $1
, $2
и т.д. Таким образом, вы не можете просто открыть их все $@
внутри сценария, потому что вы пропустили бы первый ( $0
) аргумент тогда. Вот почему я добавил dummy
аргумент: он всегда присваивается, $0
который никогда не используется в нашем случае. Все реальные аргументы (т. Е. %F
) Полностью передаются в $@
.
Отлично, мы решили первую проблему: нам удалось получить все аргументы командной строки из модуля запуска в маленькую команду bash.
Теперь к проблеме цитирования. Двойные кавычки вокруг команды bash интерпретируются программой запуска. Следовательно, все, что находится между этими кавычками, должно соответствовать спецификации Desktop Entry . В простом скрипте bash (сокращенный) вызов будет выглядеть так:
qtcreator "$@"
Поскольку каждый аргумент может содержать пробелы, мы должны заключить в кавычки $@
переменную. Теперь Exec
ключевая спецификация требует, чтобы (среди прочего) двойные кавычки и знаки доллара были заключены в кавычки, если они используются в двойных кавычках - что мы и делаем. Вторая проблема тоже решена.