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