我正在使用 Fluxbox,最近我想启动一个视频编辑应用程序,但我不记得它的名字了。我通常从终端运行应用程序,所以我想知道是否有一种方法可以列出所有(应用程序或)应用程序特定命令,例如 Xmonad 的“运行或引发”功能?这个功能可以在 1:14 看到:http://www.youtube.com/watch?v=AyNkBLhIpQk&feature=related
编辑:我希望能够在终端中键入一个命令,该命令将返回所有已安装应用程序的列表(所有可用应用程序命令的列表,例如 shotwell、gedit、gvim、vim、vi、firefox、chromium-browser 等)我想知道我可以运行哪些应用程序(我有哪些应用程序)
答案1
如果您正在使用bash(1)
,则可以使用compgen
内置的:
$ compgen -abc -A function
-a
对于别名、-b
内置函数、-c
命令和-A function
shell 函数。如果要排除这些,您可以选择哪些,因为您将得到一个相当大的列表(在我的系统上,我得到 3206 个命令)。
该compgen
命令用于生成命令行补全候选项,但也可用于此目的。
答案2
如果我们假设“您可以运行的应用程序”与“路径中的可执行文件”同义,那么这是微不足道的:
#!/bin/bash
IFS=: read -ra _dirs_in_path <<< "$PATH"
for _dir in "${_dirs_in_path[@]}"; do
for _file in "${_dir}"/*; do
[[ -x ${_file} && -f ${_file} ]] && printf '%s\n' "${_file##*/}"
done
done
答案3
如果您至少键入一个字母,然后按Tab,您将看到名称以该字母开头的所有可执行程序的列表。这就是所谓的完成或自动完成。
您可以使用以下 shell 片段列出所有可执行程序:
( IFS=':'; set -f;
for dir in $PATH; do
for x in $dir/*; do echo $x; done
done )
这列出了您拥有的所有可执行程序,这可能比您想要的“所有应用程序”更笼统。您还将看到许多旨在由其他命令调用的命令,并且很少由用户直接调用。旨在从 GUI 调用的应用程序列表可通过*.desktop
下的文件获得/usr/share/applications
。以下命令将显示它们(您会发现诸如 等的面包屑%u
,%c
指示命令通常需要什么类型的参数;它们在桌面文件格式规范)。
grep -Proh '(?<=^Exec=).*' /usr/share/applications
通过列出您拥有的软件包,您可以更好地了解您安装了哪些应用程序:dpkg -l
在 Debian、Ubuntu 及其衍生版本下;rpm -ql
Red Hat、Fedora、SuSE 及其衍生产品; ……