¿Cómo puedo cambiar la máscara de usuario para un solo comando?

15

¿Cómo puedo ejecutar interactivamente un comando en Linux (zsh, si es importante) con una umask diferente de la predeterminada, para un solo comando? ¿Quizás una combinación de comandos combinados en una sola línea? La nueva umask debe aplicarse solo a ese comando y volver a su valor predeterminado para el siguiente comando ingresado.

Idealmente, el comando sería independiente de la umask predeterminada vigente antes de ingresarla (en otras palabras, la umask predeterminada no tiene que especificarse).

Andrew Ferrier
fuente

Respuestas:

19

Comience una subshell :

(umask 22 && cmd)

Entonces lo nuevo umasksolo alterará esa subshell.

Tenga en cuenta que zshejecuta el último comando de la subshell en el proceso de subshell en lugar de bifurcar otro, lo que significa que si ese comando es externo, ni siquiera está desperdiciando un proceso, es solo que la bifurcación se hace antes (así que ya umaskestá hecho en el proceso hijo que luego ejecutará su comando).

Stéphane Chazelas
fuente
2

Podría envolverlo en un script de shell. umask hereda a todos los procesos secundarios.

cmd.sh:

umask 0022
cmd
Rob Bos
fuente
O, si desea hacerlo en una línea de comando, puede invocar un shell como este, "$ (umask 0022; cmd)"
Rob Bos
1
Confundí $ (con $(en su comentario, ahora entiendo: ( umask 0022; cmd ).
donothings exitosamente
whoops, bueno, al menos alguien aclaró que ^^
Rob Bos