bash + 如何使用子文件夹中的版本设置 cli 路径

bash + how to set cli PATH with version in sub folder

/usr/hdp文件夹下我们只能有一个以下子文件夹

2.6.5.0-292
2.6.4.0-91
2.6.0.3-8

例子

ls /usr/hdp/
2.6.5.0-292  current  stack  file.txt

我想使用以下cli,$VERSION可以是以上版本之一

/usr/hdp/$VERSION/kafka/bin/kafka-reassign-partitions.sh

然后我在 bash 脚本中执行了以下操作

[[ -d /usr/hdp/2.6.5.0-292 ]] && VERSION=2.6.5.0-292 
[[ -d /usr/hdp/2.6.4.0-91  ]] && VERSION=2.6.4.0-91  
[[ -d /usr/hdp/2.6.0.3-8   ]] && VERSION=2.6.0.3-8
/usr/hdp/$VERSION/kafka/bin/kafka-reassign-partitions.sh

如果不经过[[ -d ...... ]]的测试,我们是否可以更高效地进行上述设置?

我认为没有任何方法可以提高效率,如果您的要求是该目录应该存在,则无法避免对其进行检查。但是你至少可以通过使用循环来避免重复自己。

for ver in 2.6.5.0-292 2.6.4.0-91 2.6.0.3-8; do
    if [[ -d "/usr/hdp/$ver" ]]; then
        VERSION=$ver
        break
    fi
done

break 使脚本在列表中找到最新版本后立即跳过旧版本;您的原始代码会奇怪地做相反的事情。如果您真的想要最旧的可用版本,请将参数的顺序反转为 for.

找到匹配后不检查任何其他人是这里的实际优化,尽管是一个非常小的优化。

如果您只能 个文件夹 2.6.5.0-2922.6.4.0-912.6.0.3-8,则分配 VERSION=2.6.*将扩展到唯一且正确的文件夹。

因此您的脚本可能如下所示:

VERSION=2.6.*
/usr/hdp/$VERSION/kafka/bin/kafka-reassign-partitions.sh