上下文:我有一个 bash 脚本,它从 MinGW 交叉编译的 DLL 生成一个 Windows 导入库。作为构建过程的一部分,它运行llvm-dlltool-6.0
,因为这恰好是我安装时sudo apt-get install -y clang
(截至 2019 年 5 月)安装的该工具的特定版本。但是,我不确定这是否会是未来的版本,我真的不想将脚本与 clang 的版本绑定。
这似乎是 llvm 工具包中的一个缺陷。有许多工具带有后缀,并且没有符号链接到工具名称(我有两个llvm-dlltool-6.0
和llvm-dlltool-8
in /usr/bin/
)。
为我的系统解决这个问题的正确方法是使用update-alternatives
. 但是,我不希望每个运行构建脚本的人都这样做,也不希望每次更新 clang 时都需要不断地修复 Dockerfile。
是否有一种好方法(在 bash 脚本中)可以找到以llvm-dlltool
PATH 开头的最高版本后缀二进制文件?我可以ls /usr/bin/llvm-dlltool-* | tail -n1
,但我不能确定每个用户都将它安装在那个位置(如果用户确实有符号链接,我也想尊重符号链接llvm-dlltool
)。
您可以列出 $PATH 变量中的所有程序,使用 grep 搜索您想要的程序,然后使用以下命令按数字排序:
whereis 命令将为您提供该命令的用户路径。最后 cut 只会输出所述命令的实际位置。我先把版本号拉出来,这样排序命令就可以单独处理了。否则,llvm-dll-10 将排在 llvm-dll-9 之前
编辑:添加 ls 标志以防止错误。
编辑:使其空间兼容。