Come posso cambiare umask per un solo comando?


15

Come posso eseguire interattivamente un comando in Linux (zsh, se è importante) con una umask diversa da quella predefinita, per un solo comando? Forse una combinazione di comandi combinati in un'unica riga? La nuova umask dovrebbe applicarsi solo a quel comando e tornare al suo valore predefinito per il comando successivo inserito.

Idealmente, il comando sarebbe agnostico all'umask predefinito in vigore prima di essere inserito (in altre parole, l'umask predefinito non deve essere specificato).

Risposte:


19

Avvia una subshell :

(umask 22 && cmd)

Quindi il nuovo umaskmodificherà solo quella subshell.

Si noti che zshesegue l'ultimo comando della subshell nel processo subshell invece di sborsare un altro, il che significa che se il comando è esterno, non sei nemmeno sprecando un processo, è solo che la forcella è fatto in precedenza (in modo che il umaskè fatto nel processo figlio che eseguirà successivamente il tuo comando).


2

Potresti avvolgerlo in uno script di shell. umask eredita tutti i processi figlio.

cmd.sh:

umask 0022
cmd

Oppure, se vuoi farlo in una riga di comando, puoi invocare una shell come questa, "$ (umask 0022; cmd)"
Rob Bos,

1
Ho confuso $ (con $(nel tuo commento, ora capisco: ( umask 0022; cmd ).
donothingsuccessivamente il

urla, beh, almeno qualcuno ha chiarito che ^^
Rob Bos,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.