umask per directory


Some users insist on using bash. This is a good shell, but not as good as zsh. But, I do want them to be able to use the per directory umask as well as all the zsh users.

So I started digging, as the bash shell does not support a chpwd hook.

This is what I came up with:

chpwd()
{	# Set the initial umask
	case "${PWD}/"
	in
		/etc/puppet/*)
			um=$(umask)
			umask 007
		;;
		*)
			[[ x"${um}" != x"" ]] && umask ${um}
		;;
	esac
}
function cd()
{
	builtin cd "${@}"
	chpwd
}

Now, when I change to the directory /etc/puppet I do get a umask of 007 and when I cd somewhere else, I do get the original umask.

I do redefine the intercal cd command to run the chpwd hook. There must be a more elegant way to do this, but this does the job.

See also