Skip to content

Instantly share code, notes, and snippets.

@buzztaiki
Created December 17, 2021 07:46
Show Gist options
  • Save buzztaiki/082e76043463757d3f6db7d610b0f0d7 to your computer and use it in GitHub Desktop.
Save buzztaiki/082e76043463757d3f6db7d610b0f0d7 to your computer and use it in GitHub Desktop.
direnvを使って特定のディレクトリに新しく作ったファイルの権限を強制する

特定のディレクトリに新しく作ったファイルの権限を強制する

例えば、とあるディレクトリでは 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 が設定される

のようになる。うれしい。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment