У меня есть сложный ярлык / панель запуска, которую я хотел бы добавить в список «Открыть с помощью». Ярлык использует команду

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

Где это так сложно, потому что он должен выполнить скрипт для компилятора Intel. Я пытался изменить команду на

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 /, но он не работает.

Что я должен делать? Я прочитал много уроков по этому вопросу, но я думаю, что у меня есть особый случай с этой странной командой запуска.

Благодарю.

1 ответ1

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

Кстати: почему у вас есть screen; в начале вашей командной строки bash? Если я не ошибаюсь, в этом не должно быть необходимости.

Я должен также упомянуть, что я успешно проверил это с помощью следующей команды Exec потому что у меня здесь нет QtCreator:

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

объяснение

Из-за множества «слоев», которые здесь задействованы, немного сложно

  1. правильно передать аргументы из панели запуска в QtCreator.
  2. получить правильное цитирование.

Давайте начнем с первой проблемы: вы не можете использовать %F в аргументе (то есть в кавычках) в команде Exec запуска, смотрите последнюю строку этой страницы спецификации, которая гласит:

Коды полей% F и% U могут использоваться только в качестве аргумента самостоятельно.

Таким образом, вы должны иметь аргументы запуска (то есть, %F) в качестве аргументов на самом крайнем «слое». Но вы хотите включить их в команду bash. К счастью, bash использует все аргументы после первого аргумента для своего параметра -c качестве позиционных параметров. К сожалению, bash начинает нумерацию их с 0, т. Е. Использует $0 , $1 , $2 и т.д. Поэтому вы не можете просто получить доступ ко всем из них с помощью $@ внутри скрипта, потому что тогда вы пропустите первый ($0) аргумент. Вот почему я добавил dummy аргумент: он всегда присваивается $0 который никогда не используется в нашем случае. Все действительные аргументы (т. Е. %F) полностью передаются в $@ .

Отлично, мы решили первую проблему: нам удалось получить все аргументы командной строки из модуля запуска в маленькую команду bash.

Теперь к проблеме цитирования. Двойные кавычки вокруг команды bash интерпретируются программой запуска. Следовательно, все, что находится между этими кавычками, должно соответствовать спецификации Desktop Entry. В простом скрипте bash (сокращенный) вызов будет выглядеть так:

qtcreator "$@"

Поскольку каждый аргумент может содержать пробелы, мы должны заключить в кавычки переменную $@ . Теперь спецификация ключа Exec требует, чтобы (среди прочего) двойные кавычки и знаки доллара были заключены в кавычки, если они используются в двойных кавычках - это то, что мы делаем. Вторая проблема тоже решена.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .