例えば、とあるディレクトリでは git pull
したときに他のユーザーは見えないようにしたい場合とか。気休め程度ではあるけれど。
基本的には direnv/direnv#509 のアイディアそのまま使う。
新しいファイルの権限は umask
で決まるんだけど、ディレクトリ毎に設定する事はできない。そこで以下のようにしてこれを解決する
direnv
で環境変数を設定してPROMPT_COMMAND
を使ってその環境変数でumask
を実行する
.envrc
には以下のように書いておく:
export UMASK=0077
.bashrc
には以下を設定しておく:
## direnv
set_umask() {
if [[ $UMASK ]]; then umask "$UMASK"; else umask 0022; fi
}
eval "$(direnv hook bash)"
PROMPT_COMMAND="$PROMPT_COMMAND;set_umask"
そうすると、
- 対象のディレクトリに入ると
direnv
が環境変数UMASK
を設定 - プロンプトで何かする度に
PROMPT_COMMAND
が動いてumask $UMASK
を実行 - めでたく
umask
が設定される
のようになる。うれしい。