command-line - Linux命令列出所有可用命令和别名

有没有Linux命令可以列出终端会话的所有可用命令和别名?


ListAllCommands | grep searchstr

时间:

你可以使用bash (1)compgen

  • compgen -c将列出你可以运行的所有命令
  • compgen -a将列出你可以运行的所有别名
  • compgen -b将列出你可以运行的所有内置命令
  • compgen -k将列出你可以运行的所有关键字
  • compgen -A function将列出你可以运行的所有函数
  • compgen -A function -abck把上面所有的都列出来


compgen -ac | grep searchstr

添加到.bashrc


function ListAllCommands
{
 echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 
 -executable -type f -printf '%Pn' | sort -u
}

如果你还需要别名,就:


function ListAllCommands
{
 COMMANDS=`echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 
 -executable -type f -printf '%Pn'`
 ALIASES=`alias | cut -d '=' -f 1`
 echo"$COMMANDS"$'n'"$ALIASES" | sort -u
}

 
type -a mycommand


alias -p | cut -d= -f1 | cut -d' ' -f2

把它加入到你喜欢的路径搜索中,假定你正在使用bash。

尝试此脚本:


#!/bin/bash
echo $PATH | tr : 'n' | 
while read e; do 
 for i in $e/*; do
 if [[ -x"$i" && -f"$i" ]]; then 
 echo $i
 fi
 done
done

尝试按ALT-?给它一两秒来构建列表,它应该可以在bash中工作。

对于苹果电脑用户(find没有-executable,xargs没有-d ):


echo $PATH | tr ':' 'n' | xargs -I {} find {} -maxdepth 1 -type f -perm '++x'

你始终可以执行以下操作:


1. Hold the $PATH environment variable value.
2. Split by":"
3. For earch entry: 
 ls * $entry 
4. grep your command in that output.

你为什么不直接输入:

 
seachstr

 

在终端中。

外壳会说somehing像


seacrhstr: command not found

编辑:

我接受 downvote,因为答案是愚蠢的,我只想知道: 这个答案有什么问题 ! asker说:

查看命令是否可用。

键入命令会告诉你是否可用。

也许他/她意味着 "执行命令时执行"或者 "将它包含在脚本中"但我并不认识他的提醒( 不就是我不能定期这是仅仅是他戴着一种阅读的心境碰撞 )

下面是一个提供所有可执行文件和别名的列表,它也可以移植到没有xargs -d的系统(例如,mac os x),并适当地处理空格的路径。


#!/bin/bash
(echo -n $PATH | tr : '' | xargs -0 -n 1 ls; alias | sed 's/alias ([^=]*)=.*/1/') | sort -u | grep"$@"

用法:myscript.sh [grep-options] pattern,以查找以ls开头的所有命令,不区分大小写,执行以下操作:

 
myscript -i ^ls

...