Tôi đã viết một số kịch bản và viết một cái gì đó như
ARTIFACTS="/SOME/PATH"
[ -d $ARTIFCATS ] && rm -rf $ARTIFACTS/*
Điều xảy ra là vì sự ngu ngốc, tôi đã thực hiện dòng thứ hai mà không thực hiện dòng đầu tiên. Hóa ra [-d ""] trả về đúng và biểu thức trở thành
rm -rf /*
May mắn thay, nó chỉ là một máy thử nghiệm và tôi không phải là sudo, nhưng mặc dù tôi đã mất một số dữ liệu
Câu hỏi của tôi là, tại sao [-d ""] trở lại đúng ?? tài liệu nêu rõ nó kiểm tra xem một đường dẫn có tồn tại hay không và là một thư mục
Tôi đã giải quyết vấn đề bằng cách sử dụng
[ -e $ARTIFACTS ]
có vẻ như để làm việc
Chúc mừng
rm -rf $ARTIFACTSkhông có /*. Điều này cũng sẽ xóa $ARTIFACTSthư mục, điều này là tốt, bởi vì nếu tôi muốn chắc chắn rằng nó tồn tại trước khi đặt một cái gì đó vào nó, tôi sẽ thực hiện bằng mkdir -p $ARTIFACTSmọi cách. Nó cũng sẽ xóa các tập tin ẩn bên trong $ARTIFACTS, điều này cũng tốt, vì tôi sẽ không viết rm -rf $ARTIFACTS/*nếu $ARTIFACTSchứa bất cứ thứ gì tôi muốn lưu.