Я полагаю, что имя хоста хранится в переменной среды (названный ИМЕНЕМ ХОСТА: <). Это, вероятно, не обновляется динамично. Однако это, как предполагается, обновляет при перезапуске удара.
Можно также проверить, было ли имя хоста на самом деле изменено путем выполнения программы hostname
(О, действительно?)
В оболочке POSIX можно использовать set -u:
#!/bin/sh
set -u
: "${UNSET_VAR}"
или использовать Parameter Expansion:
: "${UNSET_VAR?Unset variable}"
В вашем случае следует использовать :?
: вместо ?
, чтобы также не работать с установленными, но пустыми переменными:
rm -rf -- "${PROJECT_HOME:?PROJECT_HOME empty or unset}"/*
[ -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 "$_"
Другой способ сделать это:
rm -r "${somevar:-/tmp/or_this_if_somevar_is_empty}"/*
Есть много подстановок переменных, одна выше - когда somevar пусто (и в этом случае он пытается удалить / tmp / or_this_if_somevar_is_empty / *
)