首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到只有前缀的二进制名称?

如何找到只有前缀的二进制名称?
EN

Ask Ubuntu用户
提问于 2019-05-08 20:17:19
回答 1查看 298关注 0票数 2

上下文:我有一个bash脚本,它从MinGW交叉编译的DLL生成一个windows导入库。作为构建过程的一部分,它运行llvm-dlltool-6.0,因为这恰好是在我sudo apt-get install -y clang (截至2019年5月)时安装的该工具的特定版本。但是,我不确定这是否是将来的版本,我真的不想把脚本绑定到clang的版本上。

这似乎是llvm工具包中的一个缺陷。有许多工具是后缀的,并且没有与工具名称符号链接(我在llvm-dlltool-6.0llvm-dlltool-8中都有/usr/bin/)。

对于我的系统来说,解决这个问题的正确方法是使用update-alternatives制作符号链接。但是,我不希望每个运行构建脚本的人都这样做,也不希望每次clang更新时都需要不断地修复Dockerfile。

有没有一种很好的方法(在bash脚本中)找到以路径上的llvm-dlltool开头的最高版本后缀二进制文件?我可以ls /usr/bin/llvm-dlltool-* | tail -n1,但我不能确定每个用户都在那个位置安装了它(如果用户确实有llvm-dlltool符号链接,我也想尊重符号链接)。

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2019-05-08 20:32:00

您可以列出$PATH变量中的所有程序,使用grep搜索所需的程序,然后使用以下命令进行数字排序:

代码语言:javascript
复制
version=$(echo -e ${PATH//:/\\n} | while read line; do find "$line" -name "llvm-dll*"; done | grep llvm-dll | sed 's/[^0-9]*//' | sort -n | tail -n 1)
whereis $(echo -e ${PATH//:/\\n} | while read line; do find "$line" -name "llvm-dll*"; done | grep llvm-dll | grep $version) | sed 's/.*: \//\//'

whereis命令将为用户提供指向该命令的路径。最后,裁剪只会输出所述命令的实际位置。我首先提取版本号,这样排序命令就可以单独处理它。否则,llvm dll-10将在llvm-dll-9之前排序。

编辑:添加ls标志以防止错误。

编辑:使其空间兼容。

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1141618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档