Решение
Значение строки 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
требует, чтобы (среди прочего) двойные кавычки и знаки доллара были заключены в кавычки, если они используются в двойных кавычках - это то, что мы делаем. Вторая проблема тоже решена.