나는 다음을하고있다
# 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