是否有Linux命令列出此终端会话的所有可用命令和别名?
好像你输入'a'并按下了标签,但是对于字母表中的每个字母。 或者运行'别名'但也返回命令。
为什么呢?我想运行以下命令,看看命令是否可用:
ListAllCommands | grep searchstr
答案 0 :(得分:560)
您可以使用bash(1)内置compgen
compgen -c
将列出您可以运行的所有命令。compgen -a
将列出您可以运行的所有别名。compgen -b
将列出您可以运行的所有内置插件。compgen -k
会列出您可以运行的所有关键字。compgen -A function
将列出您可以运行的所有功能。compgen -A function -abck
将一次性列出以上所有内容。查看手册页以了解您可以生成的其他完成项。
直接回答你的问题:
compgen -ac | grep searchstr
应该做你想要的。
答案 1 :(得分:38)
添加到.bashrc
function ListAllCommands
{
echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 \
-executable -type f -printf '%P\n' | sort -u
}
如果你还想要别名,那么:
function ListAllCommands
{
COMMANDS=`echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 \
-executable -type f -printf '%P\n'`
ALIASES=`alias | cut -d '=' -f 1`
echo "$COMMANDS"$'\n'"$ALIASES" | sort -u
}
答案 2 :(得分:25)
有
type -a mycommand
命令,列出$ PATH中使用 mycommand 的所有别名和命令。可用于检查命令是否存在于多个变体中。除此之外......可能有一些脚本解析$ PATH和所有别名,但不知道任何这样的脚本。
答案 3 :(得分:6)
使用“which searchstr”。如果它是别名
,则返回二进制路径或别名设置编辑: 如果您要查找别名列表,可以使用:
alias -p | cut -d= -f1 | cut -d' ' -f2
将其添加到您喜欢的任何PATH搜索答案中。假设你正在使用bash ..
答案 4 :(得分:6)
其他命令在嵌入式系统上对我不起作用,因为它们需要bash或更完整版本的xargs(busybox是有限的)。
以下命令适用于任何类Unix系统。
按文件夹列出:
ls $(echo $PATH | tr ':' ' ')
按名称列出所有命令
ls $(echo $PATH | tr ':' ' ') | grep -v '/' | grep . | sort
答案 5 :(得分:5)
试试这个脚本:
#!/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
答案 6 :(得分:3)
根据与命令关联的关键字列出命令很有用。
使用:man -k "your keyword"
随时与| grep "another word"
例如,要查找文本编辑器:
man -k editor | grep text
答案 7 :(得分:3)
对于Mac用户(查找没有-executable而 xargs 没有-d):
echo $PATH | tr ':' '\n' | xargs -I {} find {} -maxdepth 1 -type f -perm '++x'
答案 8 :(得分:2)
或者,您可以获得一个方便的命令列表以及快速描述(只要该命令有一个手册页,大多数都这样做):
apropos -s 1 ''
-s 1 returns only "section 1" manpages which are entries for executable programs.
'' is a search for anything. (If you use an asterisk, on my system, bash throws in a search for all the files and folders in your current working directory.)
然后你就像你想要的那样grep它。
apropos -s 1 '' | grep xdg
的产率:
xdg-desktop-icon (1) - command line tool for (un)installing icons to the desktop
xdg-desktop-menu (1) - command line tool for (un)installing desktop menu items
xdg-email (1) - command line tool for sending mail using the user's preferred e-mail composer
xdg-icon-resource (1) - command line tool for (un)installing icon resources
xdg-mime (1) - command line tool for querying information about file type handling and adding descriptions for new file types
xdg-open (1) - opens a file or URL in the user's preferred application
xdg-screensaver (1) - command line tool for controlling the screensaver
xdg-settings (1) - get various settings from the desktop environment
xdg-user-dir (1) - Find an XDG user dir
xdg-user-dirs-update (1) - Update XDG user dir configuration
结果似乎没有排序,所以如果您要查找长列表,可以抛出一个|排序|进入中间,然后将其传递给寻呼机,例如更少/更多/更多。丙氨酸:
apropos -s 1 '' | sort | grep zip | less
返回所有具有" zip"的命令的排序列表。在他们的名字或简短的描述,以及" less"寻呼机。 (你也可以用$ PAGER替换" less"并使用默认的寻呼机。)
答案 9 :(得分:2)
列出所有命令的快捷方法。 打开终端并按两次“tab”按钮。 这显示了终端
中的所有命令答案 10 :(得分:2)
这是一个解决方案,它为您提供了所有可执行文件和别名的列表。它也可以移植到没有xargs -d
的系统(例如Mac OS X),并正确处理其中包含空格的路径。
#!/bin/bash
(echo -n $PATH | tr : '\0' | xargs -0 -n 1 ls; alias | sed 's/alias \([^=]*\)=.*/\1/') | sort -u | grep "$@"
用法:myscript.sh [grep-options] pattern
,例如找到以ls
开头的所有命令,不区分大小写,执行:
myscript -i ^ls
答案 11 :(得分:2)
尝试按ALT-? (alt和问号同时)。给它一两秒钟来构建列表。它应该在bash中工作。
答案 12 :(得分:1)
这取决于我的意思,这取决于你使用的是什么shell。这是我看到的限制因素:
我使用ZSH所以这是一个zsh答案,它做了以下三件事:
这里是:
feed_me() {
(alias | cut -f1 -d= ; hash -f; hash -v | cut -f 1 -d= ; typeset +f) | sort
}
如果您使用zsh,则应该这样做。
答案 13 :(得分:1)
您可以随时使用以下内容:
1. Hold the $PATH environment variable value.
2. Split by ":"
3. For earch entry:
ls * $entry
4. grep your command in that output.
只有在路径env var中列出它们时,shell才会执行命令。
答案 14 :(得分:0)
这是一个可以放在bashrc文件中的函数:
function command-search { oldIFS=${IFS} IFS=":" for p in ${PATH} do ls $p | grep $1 done export IFS=${oldIFS} }
使用示例:
$ command-search gnome gnome-audio-profiles-properties* gnome-eject@ gnome-keyring* gnome-keyring-daemon* gnome-mount* gnome-open* gnome-sound-recorder* gnome-text-editor@ gnome-umount@ gnome-volume-control* polkit-gnome-authorization* vim.gnome* $
仅供参考:IFS是bash用于拆分字符串的变量。
当然可以有更好的方法来做到这一点。
答案 15 :(得分:0)
问题是tab-completion正在搜索你的路径,但是所有命令都不在你的路径中。
要使用bash查找路径中的命令,您可以执行以下操作:
表示echo $PATH | cut -d":" -f1
中的x;做ls $ x;完成
答案 16 :(得分:-1)
也许我是误会但是如果你按下Escape直到你获得Display All X的可能性呢?
答案 17 :(得分:-1)
基本命令:
$ touch: - 创建空文件的用户
Syn: - 触摸文件名
Ex:触摸rama
$ ls文件和目录列表
$ ls -l长列表
文件类型,权限,链接文件,用户(或)所有者名称,组名称,文件大小,时间戳,文件或目录名称。
- 常规(或)普通文件
d目录
l链接文件
ls -a:显示所有(包括隐藏文件)
隐藏文件和目录以。 (点)
答案 18 :(得分:-2)
compgen -c > list.txt && wc list.txt
答案 19 :(得分:-3)
为什么不输入:
seachstr
在终端。
shell会说像
之类的东西seacrhstr: command not found
修改强>
好的,我接受了downvote,因为答案很愚蠢,我只是想知道:这个答案出了什么问题!提问者说:
并查看命令是否可用。
输入命令会告诉您它是否可用!
可能他/她的意思是“没有执行命令”或“将其包含在脚本”中但我无法读懂他的想法(不是我能做到的)经常只是他穿着 mind reading deflector)
答案 20 :(得分:-5)
在debian中:ls / bin / | grep“whatImSearchingFor”