Inicie um subshell :
(umask 22 && cmd)
Em seguida, o novo umask
só alterará essa sub-sela.
Note que zsh
executa o último comando do subshell no processo de subshell ao invés de bifurcar outro, o que significa que se esse comando for externo, você não está nem perdendo um processo, é apenas que o fork está pronto anterior (assim o umask
é feito no processo filho que mais tarde executará seu comando).