我正在执行以下操作
# Mount cache directories
mkdir -p $SHARED_VOL/track/$TRACK/.gradle
rm -rf ~/.gradle
ln -sf $SHARED_VOL/track/$TRACK/.gradle ~/
mkdir -p $SHARED_VOL/track/$TRACK/.m2
rm -rf ~/.m2
ln -sf $SHARED_VOL/track/$TRACK/.m2 ~/
mkdir -p $SHARED_VOL/track/$TRACK/.mvn
rm -rf ~/.mvn
ln -sf $SHARED_VOL/track/$TRACK/.mvn ~/
mkdir -p $SHARED_VOL/track/$TRACK/.sbt
rm -rf ~/.sbt
ln -sf $SHARED_VOL/track/$TRACK/.sbt ~/
mkdir -p $SHARED_VOL/track/$TRACK/.ivy2
rm -rf ~/.ivy2
ln -sf $SHARED_VOL/track/$TRACK/.ivy2 ~/
现在我想将其重新格式化为一种简化的方式,我可以只提及数组中的目录,例如['.m2', '.mvn', '.gradle']
执行相同操作的一个循环。我该怎么做?
答案1
一个简单的 shell 循环:
for subdir in .gradle .m2 .mvn .sbt .ivy2; do
mkdir -p "$SHARED_VOL/track/$TRACK/$subdir"
rm -rf "$HOME/$subdir"
ln -s "$SHARED_VOL/track/$TRACK/$subdir" "$HOME"
done
bash
例如,如果您想使用单独的数组:
dirs=( .gradle .m2 .mvn .sbt .ivy2 )
for subdir in "${dirs[@]}"; do
mkdir -p "$SHARED_VOL/track/$TRACK/$subdir"
rm -rf "$HOME/$subdir"
ln -s "$SHARED_VOL/track/$TRACK/$subdir" "$HOME"
done
或者,对于/bin/sh
:
set -- .gradle .m2 .mvn .sbt .ivy2
for subdir do
mkdir -p "$SHARED_VOL/track/$TRACK/$subdir"
rm -rf "$HOME/$subdir"
ln -s "$SHARED_VOL/track/$TRACK/$subdir" "$HOME"
done
为了额外的安全性,您可能需要set -u
和/或set -e
在运行这些循环之前。set -e
如果发生错误,将终止脚本,并将set -u
未设置变量的扩展视为错误(例如,用于捕获任何拼写错误的变量名称)。