Solução
O valor da linha Exec
na sua entrada na área de trabalho deve ficar assim:
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
BTW: por que você tem screen;
no início da sua string de comando do bash? Se não estou enganado, isso não deve ser necessário.
Também devo mencionar que testei isso com o seguinte comando Exec
porque não tenho o QtCreator aqui:
screen -d -m bash -c "libreoffice --writer \"\$@\"" dummy %F
Explicação
Por causa das muitas "camadas" envolvidas, é um pouco complicado
- transmite corretamente os argumentos do iniciador para o QtCreator.
- obtenha a cotação corretamente.
Vamos começar com o primeiro problema: Você não pode usar %F
dentro de um argumento (ou seja, entre aspas) no comando Exec
de um lançador, veja a última linha desta página de especificações que diz:
The %F and %U field codes may only be used as an argument on their own.
Então você está fadado a ter os argumentos do lançador (ou seja, %F
) como argumentos na camada mais externa. Mas você quer colocá-los no pequeno comando bash. Felizmente, o bash usa todos os argumentos após o primeiro argumento para sua opção -c
como parâmetros posicionais. Infelizmente, o bash começa a numerá-los a partir de 0, isto é, usa $0
, $1
, $2
, etc. Então você não pode simplesmente acessar todos eles com $@
dentro do script porque você perderia o primeiro ( $0
) argumento então. É por isso que adicionei o argumento dummy
: ele é sempre atribuído a $0
, que nunca é usado no nosso caso. Todos os argumentos reais (por exemplo, %F
) são completamente passados para $@
.
Ótimo, resolvemos o primeiro problema: conseguimos obter todos os nossos argumentos de linha de comando do iniciador no pequeno comando bash.
Agora, para o problema de citar. As aspas duplas em torno do comando bash são interpretadas pelo iniciador. Portanto, tudo entre essas citações tem que aderir à especificação de Entrada da Área de Trabalho . Em um script bash simples, a chamada (encurtada) ficaria assim:
qtcreator "$@"
Como cada argumento pode conter espaços, temos que citar a variável $@
. Agora, a especificação da chave Exec
exige que (entre outras), aspas duplas e cifrões precisem ser cotados se forem usados entre aspas duplas - que é o que fazemos. Segundo problema resolvido também.