Bash에서 여러 mkdir 및 심볼릭 링크 반복 단순화

Bash에서 여러 mkdir 및 심볼릭 링크 반복 단순화

나는 다음을하고있다

# 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 -eset -eset -u

관련 정보