Como posso alterar o umask para apenas um comando?

13

Como posso executar interativamente um comando no Linux (zsh, se houver) com uma umask diferente do padrão, apenas para um comando? Talvez uma combinação de comandos combinados em uma única linha? O novo umask deve aplicar-se apenas a esse comando e retornar ao seu valor padrão para o próximo comando inserido.

Idealmente, o comando seria independente do umask padrão em vigor antes de ser inserido (em outras palavras, o umask padrão não precisa ser especificado).

Andrew Ferrier
fonte

Respostas:

17

Inicie um subshell :

(umask 22 && cmd)

Então o novo umasksó alterará esse subshell.

Observe que zshexecuta o último comando do subshell no processo de subshell em vez de bifurcar outro, o que significa que, se esse comando for externo, você nem estará desperdiçando um processo, é só que o fork é feito mais cedo (para que umaskseja feito) no processo filho que posteriormente executará seu comando).

Stéphane Chazelas
fonte
2

Você pode envolvê-lo em um script de shell. umask herda a todos os processos filhos.

cmd.sh:

umask 0022
cmd
Rob Bos
fonte
Ou, se você quiser fazê-lo em uma linha de comando, poderá invocar um shell como este, "$ (umask 0022; cmd)"
Rob Bos
1
I confundido $ (com $(em seu comentário, agora eu entendo: ( umask 0022; cmd ).
donothingsuccessfully
whoops, bem, pelo menos alguém esclareceu que ^^
Rob Bos