经过一番挖掘,我设法发现,要获取用户首选终端仿真器的名称(如 KDE5 设置的“默认应用程序”部分中设置的那样),可以运行以下命令:
kreadconfig5 --file kdeglobals --group General --key TerminalApplication
就我而言(使用 KDE Plasma 5 运行 Manjaro),这将返回字符串“alacrtty”。因此,将其包装起来$(...)
并在终端中输入生成的命令会启动用户首选的终端模拟器(我已经测试过这项工作)。
然而,当我为 KDE 创建自定义键盘快捷键来运行此命令时Meta+Return
,没有任何反应。我也尝试把它放在exec
它前面以防万一有必要,但它没有改变任何东西。如果我只是设置运行命令的快捷方式alacritty
(这是我提到的第一个命令返回的内容),那么它就可以工作,但当然我希望能够运行用户首选的终端,而不是特定的终端。
谁能向我解释为什么它不起作用?难道我做错了什么?
答案1
该构造$(...)
(命令替换)是 POSIX shell 命令语言的一部分,需要 shell 才能解释它。据我所知,桌面环境中包含的应用程序启动器不需要能够解释 shell 命令语言;为了安全起见,我假设他们只能exec
使用一个文件并向其传递一个参数列表。
您应该能够定义一个调用类似以下内容的键盘快捷键:
sh -c '"$(kreadconfig5 ...)"'
命令替换用双引号引起来,以确保替换命令生成的文件路径包含空格字符时不会失败。
为了完整起见,请注意,如果可执行文件的名称以一个或多个换行符结尾(当然,极不可能),这仍然会失败。