Answers:
您可以使用内置的bash(1) compgen
compgen -c
将列出您可以运行的所有命令。compgen -a
将列出您可以运行的所有别名。compgen -b
将列出您可以运行的所有内置插件。compgen -k
将列出您可以运行的所有关键字。compgen -A function
将列出您可以运行的所有功能。compgen -A function -abck
一口气列出以上所有内容。检查手册页以了解可以生成的其他完成内容。
要直接回答您的问题:
compgen -ac | grep searchstr
应该做你想做的。
compgen | grep
,将字符串作为参数传递给compgen
自身(如果已知为前缀,如问题中所暗示的那样)会更有效。在这种情况下,该值为compgen -ac searchstr
。
whatis compgen
而表示“无手动输入” man compgen
。
bash
内置命令,而不是带有自己的手册页的单独命令。您需要阅读bash(1)
手册页或help compgen
在bash
命令行中运行。
compgen -c | sort | uniq | less
将打印所有可用命令,而不重复行并按字母顺序排序。
添加到.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
}
-L
on 选项可将符号链接跟随到其目的地。注意:-L
是一个选项,而不是匹配表达式的一部分,因此必须将其放置在命令行中的路径之前。在这种情况下find -L {}
echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 -executable -type f -printf '%P\n' 2> /dev/null | sort -u
(+1表示zsh兼容性)
有
type -a mycommand
该命令列出使用mycommand的 $ PATH中的所有别名和命令。可用于检查命令是否存在多种变体。除此之外...可能有一些脚本解析$ PATH和所有别名,但不知道任何此类脚本。
others命令在嵌入式系统上对我不起作用,因为它们需要bash或更完整的xargs版本(busybox受限制)。
以下命令应在任何类似Unix的系统上运行。
按文件夹列出:
ls $(echo $PATH | tr ':' ' ')
按名称列出所有命令
ls $(echo $PATH | tr ':' ' ') | grep -v '/' | grep . | sort
tr
。为什么不简单ls $(echo ${PATH//:/ })
?
对于Mac用户(find不具有-executable,xargs不具有-d):
echo $PATH | tr ':' '\n' | xargs -I {} find {} -maxdepth 1 -type f -perm '++x'
尝试按ALT-?(同时使用Alt和问号)。给它一两秒钟来建立列表。它应该在bash中工作。
这是一个解决方案,可为您提供所有可执行文件和别名的列表。它也可以移植到没有系统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
另外,您可以获取方便的命令列表以及快速描述(只要命令具有手册页即可,大多数情况下都可以这样做):
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”并使用默认的寻呼机。)
您可以随时执行以下操作:
1. Hold the $PATH environment variable value.
2. Split by ":"
3. For earch entry:
ls * $entry
4. grep your command in that output.
无论如何,shell只会在路径env var中列出命令时才执行命令。
这取决于我的意思,这取决于您所使用的外壳。这是我看到的约束:
我使用ZSH,所以这是zsh的答案,它执行以下3件事:
这里是:
feed_me() {
(alias | cut -f1 -d= ; hash -f; hash -v | cut -f 1 -d= ; typeset +f) | sort
}
如果使用zsh,则应该这样做。
您可以在bashrc文件中放入以下函数:
功能命令搜索 { oldIFS = $ {IFS} IFS =“:” 用于$ {PATH}中的p 做 ls $ p | grep $ 1 做完了 导出IFS = $ {oldIFS} }
用法示例:
$命令搜索gnome gnome-audio-profiles-属性* gnome-eject @ 侏儒钥匙扣* gnome-keyring-daemon * 侏儒山* 侏儒开放* 侏儒录音机* gnome-text-editor @ gnome-umount @ gnome-音量控制* polkit-gnome-授权* vim.gnome * $
仅供参考:IFS是bash用于拆分字符串的变量。
当然,可能有一些更好的方法可以做到这一点。
compgen -c > list.txt && wc list.txt
compgen -c > /tmp/list.txt && /tmp/wc list.txt
为什么不输入:
seachstr
在终端。
贝壳会说一些像
seacrhstr: command not found
编辑:
好的,我赞成,因为答案很愚蠢,我只想知道:这个答案有什么问题!!!询问者说:
并查看命令是否可用。
键入命令将告诉您该命令是否可用!
可能他/她的意思是“不执行命令” 或“将其包括在脚本中”,但我无法读懂他的想法(不是我不能定期地仅仅是因为他戴着 思想阅读器)
formathdd
命令是否存在。哦,等等,我只是运行它看看。哎呀 谢谢:)