簡體   English   中英

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

[英]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會導致腳本在列表中找到最新版本后立即跳過舊版本; 你的原始代碼會奇怪地做相反的事情。 如果您真的想要最舊的可用版本,請將 arguments 的順序顛倒為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM