问题
在我使用 Linux 的这些年里,我使用过各种应用程序启动器,例如rofi
、、、等。虽然它们albert
各有优缺点,但有一件事一直困扰着我:wofi
它们不是 bash shell。dmenu
这为什么重要?我真的很喜欢 bash 的一些功能,例如:
- GNU Readline 快捷键:
Ctrl+A
使用(行首)、Ctrl+E
(行末)、Ctrl+K
(删除文本)、Ctrl+Y
(拉出)、Meta+Y
(拉出历史)等浏览或编辑文本。 - 命令历史:使用/
~/.bash_history
进行搜索,或使用/导航命令。Ctrl+R
Ctrl+S
Ctrl+P
Ctrl+N
- 制表符补全:借助
bash-completion
和等工具bash-complete-alias
,我可以获得路径、命令名称和参数的强大自动补全功能。 - 别名:通过我的自定义别名可以更容易、更快地启动某些程序。
我的目标
我想使用终端仿真器作为简单的应用程序启动器。它的工作方式如下:
- 按快捷键启动终端(例如
kitty
)。 - 输入命令(例如
firefox
)。 - 按
<Enter>
。终端应该:- 启动命令。
- 立即自行关闭。
- 让启动的应用程序保持运行。
例如,键入firefox
应该表现得像执行firefox & disown & exit
或nohup firefox > /dev/null 2>&1 & exit
。& disown & exit
在命令后键入可以达到预期的效果,但是,当然,我不想& disown & exit
每次都手动添加。
注意:这不是窗口吞噬。我不希望终端窗口在应用程序关闭后停留;我只需要它用于输入。
我尝试过的方法
使用
read
:使用此命令
启动:kitty
kitty -e bash -i -c 'read -e -p "Command: " cmd; eval "$cmd"'
这种方法失败了,因为通过输入
read
会绕过我想要的一些 shell 功能,例如制表符补全和命令历史记录。使用辅助快捷键实现自动化:
键入命令并使用另一个快捷键(例如Super+<Enter>
)附加并执行& disown & exit<Enter>
类似 的工具wtype
。
这是一种非常实用的方法,但如果有效,我会接受它。不幸的是,它不起作用:按下修饰键会Super
导致不必要的行为:字符串中的每个字符(& disown & exit<Enter>
)都与修饰键一起发送,从而触发快捷键而不是被解释为文本。
结论
我该如何实现这一点?我想要一个解决方案,让我能够快速启动应用程序,同时利用交互式 bash shell 的所有功能。