Warum funktioniert dieser KDE-Tastenkombinationsbefehl nicht?

Warum funktioniert dieser KDE-Tastenkombinationsbefehl nicht?

Nach einigem Suchen habe ich herausgefunden, dass man den Namen des bevorzugten Terminalemulators des Benutzers, wie er im Abschnitt „Standardanwendungen“ der KDE5-Einstellungen festgelegt ist, durch Ausführen des folgenden Befehls ermitteln kann:

kreadconfig5 --file kdeglobals --group General --key TerminalApplication

In meinem Fall (Manjaro mit KDE Plasma 5 ausführen) gibt dies die Zeichenfolge „alacritty“ zurück. Wenn man dies also einbindet $(...)und den resultierenden Befehl in ein Terminal eingibt, wird der bevorzugte Terminalemulator des Benutzers gestartet (ich habe getestet, ob dies funktioniert).

Wenn ich jedoch eine benutzerdefinierte Tastenkombination für KDE erstelle, um diesen Befehl auszuführen Meta+Return, passiert nichts. Ich habe auch versucht, execdavor zu setzen, falls es notwendig sein sollte, aber es hat nichts geändert. Wenn ich nur die Tastenkombination einrichte, um den Befehl auszuführen alacritty(was vom ersten Befehl zurückgegeben wird, den ich erwähnt habe), funktioniert es, aber natürlich möchte ich das vom Benutzer bevorzugte Terminal ausführen können, nicht ein bestimmtes.

Kann mir jemand erklären, warum es nicht funktioniert? Mache ich etwas falsch?

Antwort1

Die Konstruktion $(...)(Befehlsersetzung) ist Teil der POSIX-Shell-Befehlssprache und erfordert eine Shell, um sie interpretieren zu können. Soweit ich weiß, müssen Anwendungsstarter, die in Desktopumgebungen enthalten sind, die Shell-Befehlssprache nicht interpretieren können. Um auf Nummer sicher zu gehen, würde ich annehmen, dass sie nur execeine Datei verwenden und ihr eine Liste von Argumenten übergeben können.

Sie sollten in der Lage sein, eine Tastenkombination zu definieren, die etwa Folgendes aufruft:

sh -c '"$(kreadconfig5 ...)"'

Die Befehlsersetzung wird in doppelte Anführungszeichen eingeschlossen, um sicherzustellen, dass sie nicht fehlschlägt, wenn der vom ersetzten Befehl erzeugte Dateipfad Leerzeichen enthält.
Der Vollständigkeit halber sei darauf hingewiesen, dass dies auch dann fehlschlägt, wenn der Name der ausführbaren Datei mit einem oder mehreren Zeilenumbruchzeichen endet (was natürlich äußerst unwahrscheinlich ist).

verwandte Informationen