如何无需知晓路径,按类通配符模式匹配列出可执行文件?
用类通配符查找匹配模式的可执行文件
要实现类似Unix Shell中Tab补全的效果,无需知晓可执行文件路径就能列出匹配特定模式的可执行文件,有几种实用方法:
1. 用bash内置命令compgen直接生成结果
compgen是bash专门用于生成补全候选的内置工具,直接执行就能得到和Tab补全一致的结果:
compgen -c gcc-*
这个命令会列出所有在PATH路径下、名称匹配gcc-*模式的可执行文件,同时也会包含别名、内置命令等(如果存在的话)。如果只想筛选出外部可执行文件,可以搭配过滤逻辑:
compgen -c gcc-* | while read cmd; do if command -v "$cmd" >/dev/null 2>&1 && ! type -t "$cmd" | grep -qE 'alias|builtin|function'; then echo "$cmd" fi done
2. 手动遍历PATH目录匹配
如果你想手动实现逻辑,可拆分PATH环境变量,遍历每个目录并匹配目标模式:
# 拆分PATH为目录数组 IFS=: read -ra path_dirs <<< "$PATH" matches=() # 遍历每个目录,收集匹配的文件 for dir in "${path_dirs[@]}"; do shopt -s nullglob # 避免匹配失败时返回原模式字符串 matches+=("$dir"/gcc-*) done # 提取文件名(去掉路径) basename -a "${matches[@]}"
这个脚本会遍历PATH下的所有目录,找出所有名称以gcc-开头的可执行文件,最后输出纯文件名。
3. 用find命令批量查找
也可以用find命令遍历PATH中的目录,匹配目标模式:
IFS=: read -ra path_dirs <<< "$PATH" find "${path_dirs[@]}" -maxdepth 1 -type f -executable -name 'gcc-*' -printf "%f\n" | sort -u
-maxdepth 1确保只查找目录下的直接文件,-type f -executable限制为可执行文件,-printf "%f\n"输出文件名而非完整路径,sort -u去重(避免不同目录下有同名文件)。
内容的提问来源于stack exchange,提问作者thomas_f
相关产品推荐
相关产品推荐

