Добавление сложного модуля запуска в список «Открыть с помощью» в Ubuntu

575
The Quantum Physicist

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

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

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

Благодарю.

0

1 ответ на вопрос

2
Chriki

Решение

Значение 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опции в качестве позиционных параметров. К сожалению, Баш начинает нумеровать их от 0, то есть, он использует $0, $1, $2и т.д. Таким образом, вы не можете просто открыть их все $@внутри сценария, потому что вы пропустили бы первый ( $0) аргумент тогда. Вот почему я добавил dummyаргумент: он всегда присваивается, $0который никогда не используется в нашем случае. Все реальные аргументы (т. Е. %F) Полностью передаются в $@.

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

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

qtcreator "$@" 

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

Ты лучший :) The Quantum Physicist 10 лет назад 0

Похожие вопросы