You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为处理.desktop文件的bash脚本添加类似Rofi的动态补全功能

实现动态输入匹配、自动补全效果的三种方案

你原有的sed逻辑可以先合并优化,减少不必要的管道进程:
ls -1 /usr/share/applications ~/.local/share/applications | sed -e 's/\.desktop$//' -e 's/^org.gnome.//'

注:默认desktop文件存放在系统级的/usr/share/applications和用户级的~/.local/share/applications目录,如果你是cd到对应目录执行命令可以省略路径。

方案1:使用fzf实现命令行实时模糊匹配(最推荐)

fzf是轻量命令行模糊查找工具,原生支持实时输入过滤、动态输出、自动补全,完全适配你的需求,不需要自己编写read匹配逻辑:

# 基础实时匹配,回车返回选中的应用名
ls -1 /usr/share/applications ~/.local/share/applications | sed -e 's/\.desktop$//' -e 's/^org.gnome.//' | fzf --height=10 --layout=reverse --prompt="启动应用: "

# 如果需要和原有grep逻辑一致的精确匹配,加--exact参数
ls -1 /usr/share/applications ~/.local/share/applications | sed -e 's/\.desktop$//' -e 's/^org.gnome.//' | fzf --exact --height=10 --layout=reverse --prompt="启动应用: "

# 直接启动选中应用,末尾加gtk-launch调用
ls -1 /usr/share/applications ~/.local/share/applications | sed -e 's/\.desktop$//' -e 's/^org.gnome.//' | fzf --height=10 --layout=reverse --prompt="启动应用: " | xargs gtk-launch

方案2:纯Bash实现基础动态补全(无额外依赖)

如果不想安装第三方工具,可以用Bash自带的readline补全机制实现基础的实时补全效果:

# 预先生成所有应用名列表
app_list=$(ls -1 /usr/share/applications ~/.local/share/applications | sed -e 's/\.desktop$//' -e 's/^org.gnome.//')

# 配置应用名补全规则
_comp_apps() {
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "$app_list" -- "$cur") )
}
complete -F _comp_apps launch_app

# 定义应用启动函数
launch_app() {
    gtk-launch "$1"
}

配置完成后,在终端输入launch_app 后按Tab键,就会自动列出匹配你输入内容的应用名,多次按Tab可以在候选结果中切换选择。

方案3:使用Rofi原生能力实现GUI选择

如果你本地已经安装了Rofi,可以直接把处理后的应用列表传给Rofi的dmenu模式,体验和Rofi默认应用启动器完全一致:

ls -1 /usr/share/applications ~/.local/share/applications | sed -e 's/\.desktop$//' -e 's/^org.gnome.//' | rofi -dmenu -p "启动应用" | xargs gtk-launch

内容的提问来源于stack exchange,提问作者Taylor Johnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:24:02