Simplifique vários mkdir e symlink em uma festa de loop

0

Estou realizando as seguintes operações

# 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 ~/

Agora eu gostaria de reformatar isso de uma forma simplificada, onde posso apenas mencionar os diretórios em uma matriz, como ['.m2', '.mvn', '.gradle'] e um único loop que executa as mesmas operações. Como faço isso?

    
por bholagabbar 13.11.2018 / 14:07

1 resposta

2

Um simples loop de 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

Se você quiser usar uma matriz separada em bash , por exemplo:

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

Ou, para /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

Para maior segurança, você pode querer set -u e / ou set -e antes de executar esses loops. set -e terminaria o script se um erro ocorresse, e set -u trataria a expansão de uma variável não definida como um erro (para capturar qualquer nome de variável com erros ortográficos, por exemplo).

    
por 13.11.2018 / 14:20