如何在终端中列出可用的应用程序命令

如何在终端中列出可用的应用程序命令

我正在使用 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 functionshell 函数。如果要排除这些,您可以选择哪些,因为您将得到一个相当大的列表(在我的系统上,我得到 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 -qlRed Hat、Fedora、SuSE 及其衍生产品; ……

相关内容