“which”有一个类似“grep”的解决方案吗?

“which”有一个类似“grep”的解决方案吗?
# which mkdir
/bin/mkdir
# which mkdi
# 

mkdir在不知道二进制文件名的情况下如何获取eg: 的二进制文件的路径? (命令)。这样which mkdi也会输出/bin/mkdir

答案1

在 zsh 中:

echo $path/mkdi*(N)

在其他壳中,供人类食用:

set -f; IFS=:
for x in $PATH; do set +f; ls $x/mkdi* 2>/dev/null; done

答案2

定位

locate mkdi

更新:这将限制输出到$PATH

locate mkdi | 
while read filename; do 
  [[ ":$PATH:" == *:$(dirname $filename):* ]] && echo $filename
done

答案3

run-parts只要给出正确的参数,就可以做到这一点。这是我围绕它编写的一个简单的包装:

#!/bin/bash
# swhich - search the path (like which) but with support for regular expressions
# "swhich '.*ch$' '^wh'" to find all in path ending with 'ch' and all starting with 'wh'
set -f; IFS=:
for all in $PATH
  do
  set +f
  for each in "$@"
    do
    run-parts --list --regex "$each" "$all"
  done
done

答案4

compgen是一个 BASH 内置命令,可以为给定的字符串生成补全。交换机-c补全路径中的命令名称:

$ compgen -c mkd
mkdirhier
mkdir
mkdiskimage
mkdir

注意:mkdir这里出现两次,因为它位于我系统上的 /bin 和 /usr/bin 中。

可编程完成很酷。它会让你做这样的事情:

$ shopt -s progcomp; complete -c which # set up progcomp
$ which mkd<ALT-*>
$ which mkdir mkdirhier mkdiskimage

...这可能更接近您正在寻找的东西。

相关内容