在典型的Linux shell(bash)中,可以按Tab键两次,以获取所有可用shell命令的列表。
是否有一个具有相同行为的命令?我想把它管道到grep
并搜索它。
答案 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
我的输出 - 这意味着要搜索一些命令。