私は次のことをしています
# 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
シンプルなシェルループ:
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