Hinzufügen eines komplizierten Starters zur Liste "Öffnen mit" in Ubuntu

638
The Quantum Physicist

Ich habe ein kompliziertes Shortcut / Launcher, das ich in die Liste "Öffnen mit" aufnehmen möchte. Die Verknüpfung verwendet den Befehl

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

Wo es so kompliziert ist, weil es ein Skript für den Intel-Compiler ausführen muss. Ich habe versucht, den Befehl in zu ändern

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

Kopieren Sie dann die Datei QtCreator.desktop nach / use / share / applications /, aber es hat nicht funktioniert.

Was soll ich machen? Ich habe viele Tutorials dazu gelesen, aber ich glaube, ich habe einen speziellen Fall mit diesem komischen Launcher-Befehl.

Vielen Dank.

0

1 Antwort auf die Frage

2
Chriki

Lösung

Der Wert der ExecZeile 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 ExecBefehl 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

  1. Übergeben Sie die Argumente des Launchers korrekt an QtCreator.
  2. Holen Sie sich das Zitat richtig.

Beginnen wir mit dem ersten Problem: Sie können nicht %Finnerhalb eines Arguments (dh innerhalb von Anführungszeichen) im ExecBefehl 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 -cOption 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 dummyArgument hinzugefügt : Es wird immer zugewiesen, $0was 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 Execverlangt 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.

Du bist der beste :) The Quantum Physicist vor 10 Jahren 0