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



/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

最新更新