Pisałem kilka scenariuszy i napisałem coś podobnego
ARTIFACTS="/SOME/PATH"
[ -d $ARTIFCATS ] && rm -rf $ARTIFACTS/*
Stało się tak, że z głupoty wykonałem drugą linię bez wykonania pierwszej. Okazało się, że [-d ""] zwraca true, a wyrażenie się stało
rm -rf /*
Na szczęście była to tylko maszyna testowa i nie byłem sudo, ale straciłem trochę danych
Moje pytanie brzmi: dlaczego [-d ""] zwraca true ?? dokumentacja wyraźnie stwierdza, że sprawdza, czy ścieżka istnieje i czy jest folderem
Rozwiązałem problem za pomocą
[ -e $ARTIFACTS ]
który wydaje się działać
Twoje zdrowie
rm -rf $ARTIFACTS
bez /*
. Spowoduje to również usunięcie $ARTIFACTS
katalogu, co jest w porządku, ponieważ jeśli chcę mieć pewność, że istnieje przed włożeniem czegoś do niego, i mkdir -p $ARTIFACTS
tak wykonam . Usunie również ukryte pliki w środku $ARTIFACTS
, co również jest w porządku, ponieważ nie pisałbym, rm -rf $ARTIFACTS/*
gdyby $ARTIFACTS
zawierał coś, co chciałem zapisać.