[英]Get current directory (not full path) with filename only when sub folder is present in Linux bash
[英]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-292
、 2.6.4.0-91
或2.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.