我需要运行一个 bash 脚本,该脚本将检索位于特定菜单项(如附件/实用程序或教育等)中的所有桌面文件,然后运行其中的特定文件。我可以使用哪些终端命令来执行此操作?
答案1
这些.desktop
文件位于/usr/share/applications/
(系统范围)或~/.local/share/applications
(每个用户)下。分类是通过在文件中设置“类别”属性来完成的,这可能与菜单中显示的不完全相同,因此您首先需要找出正确的类别名称。在我的菜单中有一个名为“Büro”的类别,这是德语中“Office”的意思,它包含一个启动器qpdfview
。要查看.desktop
文件的“类别”行,我运行:
$ grep Categories /usr/share/applications/qpdfview.desktop
Categories=Viewer;Office;
这显示了该程序的两个类别,因此它在文件中被称为“Office” 。为了获取所有归类为“Office”的文件.desktop
列表,我再次使用标志仅显示没有匹配项的文件名:.desktop
grep
-l
$ grep -l Categories.*Office /usr/share/applications/*
/usr/share/applications/evince.desktop
/usr/share/applications/evince-previewer.desktop
/usr/share/applications/gnucash.desktop
/usr/share/applications/libreoffice-base.desktop
/usr/share/applications/libreoffice-calc.desktop
/usr/share/applications/libreoffice-draw.desktop
/usr/share/applications/libreoffice-impress.desktop
/usr/share/applications/libreoffice-math.desktop
/usr/share/applications/libreoffice-startcenter.desktop
/usr/share/applications/libreoffice-writer.desktop
/usr/share/applications/qpdfview.desktop
这就是我们的办公程序列表,现在要运行它们我只需使用xdg-open
,例如:
xdg-open /usr/share/applications/qpdfview.desktop
如果xdg-open
您的系统不起作用,您也可以从文件中提取启动命令并直接运行它,例如:
exec $(grep -Po 'Exec=\K[^ ]*' /usr/share/applications/qpdfview.desktop)
您没有提供有关您或脚本用户应如何选择要运行的程序的信息,因此这里有一些链接可以帮助您:
将文件名保存在数组中以便在脚本中轻松处理就是这么简单:
options=("$(grep -l Categories.*Office /usr/share/applications/*)")