$PROJECT_HOME/*
때로는 프로젝트의 모든 파일을 사용하고 삭제합니다. PROJECT_HOME
환경 변수가 설정되지 않은 경우 (내가 설정했고 su
새 사용자가 이 환경 변수를 설정하지 않았기 때문에) 루트 폴더에서 모든 파일이 삭제되기 시작합니다. 이것이 세상의 종말이다.
bash
셸에서 정의되지 않은 환경 변수를 사용할 때 발생하는 오류를 어떻게 구성합니까?
답변1
답변2
[ -z "$PROJECT_HOME" ] || rm -r "$PROJECT_HOME"/*
이는 다음과 같은 경우도 포착합니다.PROJECT_HOME
예설정은 되었지만 내용이 없습니다.
예:
1) 이렇게 하면 시스템에서 삭제할 수 있는 거의 모든 항목이 삭제됩니다(내부의 도트 파일은 제외 /
(일반적으로 존재하지 않음)).
set -u
PROJECT_HOME=
rm -r "$PROJECT_HOME"/*
2) 이것은 아무것도 하지 않습니다:
PROJECT_HOME=
[ -z "$PROJECT_HOME" ] || rm -r "$PROJECT_HOME"/*
프로젝트 홈 디렉터리를 완전히 삭제하고 다시 만드는 것도 또 다른 옵션일 수 있습니다(점 파일도 제거하려는 경우).
#no apocalyptic threats in this scenario
rm -r "$PROJECT_HOME"
mkdir "$_"
답변3
이를 수행하는 또 다른 방법:
rm -r "${somevar:-/tmp/or_this_if_somevar_is_empty}"/*
변수 대체가 많이 있습니다. 위의 대체는 "somevar"가 비어 있는 경우입니다(이 경우 삭제를 시도합니다 /tmp/or_this_if_somevar_is_empty/*
).