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).

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).


2

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

cmd.sh:

umask 0022
cmd

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.