如何获取所有可用shell命令的列表

时间:2012-03-31 23:01:56

标签: bash shell

在典型的Linux shell(bash)中,可以按Tab键两次,以获取所有可用shell命令的列表。

是否有一个具有相同行为的命令?我想把它管道到grep并搜索它。

10 个答案:

答案 0 :(得分:9)

你可以使用compgen。例如:

compgen -c

你也可以这样写:

compgen -c | grep top$

来源:http://www.cyberciti.biz/open-source/command-line-hacks/compgen-linux-command/

答案 1 :(得分:2)

如果首先调整字段分隔符,则可以直接从$PATH列出目录。 parens将效果限制为one命令,因此请使用:(...) | grep ...

(IFS=': '; ls -1 $PATH)

答案 2 :(得分:1)

“标签”两次& “y”打印$ PATH路径中的所有文件。所以只需在PATH中打印所有文件即可。

只需在shell中输入:

 # printf "%s\n" ${PATH//:/\/* } > my_commands

这会将所有命令重定向到文件“my_commands”。

答案 3 :(得分:1)

列出PATH variable中的所有文件(列出PATH中的所有目录)。默认的用户和系统命令分别位于/ bin和/ sbin中,但在安装某些软件时,我们会将它们添加到某个目录并使用PATH变量将其链接。

答案 4 :(得分:0)

您的路径上可能存在实际上无法执行的内容。

#!/bin/sh
for d in ${PATH//:/ }; do
  for f in "$d"/*; do
    test -x "$f" && echo -n "$f "
  done
done
echo ""

当然,这也会打印路径。如果您只想要不合格的文件名,那么应该很容易适应它。

有趣的是,StackOverflow不知道如何处理语法高亮。 : - )

答案 5 :(得分:0)

标签 标签 ý

答案 6 :(得分:0)

与@ghoti类似,但使用find:

#!/bin/sh
for d in ${PATH//:/ }; do
    find $d -maxdepth 1 -type f -executable
done

答案 7 :(得分:0)

Bash使用名为“complete”的内置命令来实现选项卡功能。

我手边没有详细信息,但是应该告诉你所有你需要知道的事情:

help complete 

答案 8 :(得分:0)

(IFS=':'; find $PATH -maxdepth 1 -type f -executable -exec basename {} \; | sort | uniq)

它不包括shell内置。

答案 9 :(得分:0)

答案被删除,我最喜欢,所以我试图重新发布:

compgen当然更好

echo $PATH | tr ':' '\n' | xargs -n 1 ls -1

我发现这是最典型的外壳,我认为它也适用于其他外壳(我怀疑像IFS=':'这样的东西)

显然,如果文件不是可执行文件,可能存在问题,但我认为对于我的问题,这就足够了 - 我只想grep我的输出 - 这意味着要搜索一些命令。