時々私は、$PROJECT_HOME/*
プロジェクト内のすべてのファイルを削除します。環境変数、PROJECT_HOME
が設定されていない(私がsu
を実行したため、新しいユーザーにはこの環境変数が設定されていないため)、ルートフォルダーからすべてのファイルの削除が開始されます。これは終末論的です。
シェルで未定義の環境変数を使用するときに、エラーをスローするようにbash
を構成するにはどうすればよいですか?
POSIXシェルでは、 set - を使用できます。
#!/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
is設定されていますが、何も含まれていません。
例:
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/*
を削除しようとします)