Adicionando um lançador complicado à lista “Open With” no Ubuntu

0

Eu tenho um atalho / lançador complicado que gostaria de colocar na lista Abrir com. O atalho usa o comando

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

Onde isso é complicado porque tem que executar um script para o compilador intel. Eu tentei mudar o comando para

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

e copie o arquivo QtCreator.desktop para / use / share / applications /, mas não funcionou.

O que devo fazer? Eu li muitos tutoriais sobre isso, mas acho que tenho um caso especial com esse comando de inicialização estranho.

Obrigado.

    
por The Quantum Physicist 15.11.2013 / 13:04

1 resposta

2

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

  1. transmite corretamente os argumentos do iniciador para o QtCreator.
  2. 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.

    
por 15.11.2013 / 16:13