Почему эта комбинация клавиш KDE не работает?

Почему эта комбинация клавиш KDE не работает?

После некоторых поисков мне удалось выяснить, что для получения имени предпочитаемого пользователем эмулятора терминала, установленного в разделе «Приложения по умолчанию» настроек KDE5, можно выполнить следующую команду:

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

В моем случае (запуск Manjaro с KDE Plasma 5) это возвращает строку 'alacritty'. Таким образом, обернув это $(...)и введя полученную команду в терминале, вы запустите предпочитаемый пользователем эмулятор терминала (я проверил, что это работает).

Однако, когда я создаю пользовательское сочетание клавиш для KDE, чтобы запустить эту команду с помощью Meta+Return, ничего не происходит. Я также пробовал ставить execперед ним на случай необходимости, но это ничего не изменило. Если я просто настраиваю сочетание клавиш для запуска команды alacritty(что и возвращает первая упомянутая мной команда), то это работает, но, конечно, я хочу иметь возможность запускать любой предпочитаемый пользователем терминал, а не какой-то определенный.

Кто-нибудь может мне объяснить, почему это не работает? Я что-то делаю не так?

решение1

Конструкция $(...)(подстановка команд) является частью языка команд оболочки POSIX и требует оболочки для ее интерпретации. Насколько я могу судить, средства запуска приложений, включенные в окружения рабочего стола, не обязаны иметь возможность интерпретировать язык команд оболочки; чтобы обезопасить себя, я бы предположил, что они могут только execиспользовать файл и передавать ему список аргументов.

Вы должны иметь возможность определить сочетание клавиш, которое вызывает что-то вроде:

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

Подстановка команды заключена в двойные кавычки, чтобы гарантировать, что она не потерпит неудачу, если путь к файлу, созданный подставляемой командой, содержит пробельные символы.
Для полноты отметим, что это все равно потерпит неудачу, если имя исполняемого файла заканчивается одним или несколькими символами новой строки (конечно, крайне маловероятно).

Связанный контент