Lösung
Der Wert der Exec
Zeile in Ihrem Desktop-Eintrag sollte folgendermaßen aussehen:
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: Warum haben Sie screen;
am Anfang Ihrer Bash-Befehlszeichenfolge? Wenn ich mich nicht irre, sollte das nicht nötig sein.
Ich sollte auch erwähnen, dass ich dies mit dem folgenden Exec
Befehl erfolgreich getestet habe, da ich hier keinen QtCreator habe:
screen -d -m bash -c "libreoffice --writer \"\$@\"" dummy %F
Erläuterung
Aufgrund der vielen "Schichten", die hier involviert sind, ist es ein bisschen schwierig
- Übergeben Sie die Argumente des Launchers korrekt an QtCreator.
- Holen Sie sich das Zitat richtig.
Beginnen wir mit dem ersten Problem: Sie können nicht %F
innerhalb eines Arguments (dh innerhalb von Anführungszeichen) im Exec
Befehl eines Launchers verwendet werden. Sehen Sie sich die letzte Zeile dieser Spezifikationsseite an :
Die Feldcodes% F und% U dürfen nur als Argument verwendet werden.
Sie müssen also die Launcher-Argumente (dh %F
) als Argumente auf der äußersten "Ebene" haben. Aber Sie möchten sie in den kleinen Bash-Befehl bringen. Glücklicherweise verwendet bash alle Argumente nach dem ersten Argument seiner -c
Option als Positionsparameter. Leider beginnt bash sie zu zählen von 0, das heißt, es nutzt $0
, $1
, $2
, etc. So können Sie nicht nur sie alle mit Zugriff $@
im Skript, weil Sie das erste (verpassen würde $0
) Argument dann. Deshalb habe ich das dummy
Argument hinzugefügt : Es wird immer zugewiesen, $0
was in unserem Fall nie verwendet wird. Alle reellen Argumente (dh %F
) werden vollständig übergeben $@
.
Toll, wir haben das erste Problem gelöst: Wir haben es geschafft, alle Befehlszeilenargumente aus dem Launcher in den kleinen Bash-Befehl zu holen.
Nun zu dem Problem des Zitierens. Die Anführungszeichen um den Bash-Befehl werden vom Launcher interpretiert. Alles zwischen diesen Anführungszeichen muss folglich der Desktop Entry-Spezifikation entsprechen . In einem einfachen Bash-Skript würde der (verkürzte) Aufruf folgendermaßen aussehen:
qtcreator "$@"
Da jedes Argument Leerzeichen enthalten kann, müssen Sie die $@
Variable in Anführungszeichen setzen . Nun Exec
verlangt die Schlüsselspezifikation, dass (unter anderem) doppelte Anführungszeichen und Dollarzeichen notiert werden müssen, wenn sie in doppelten Anführungszeichen verwendet werden - was wir tun. Zweites Problem gelöst.