Comment puis-je changer le umask pour une seule commande?

15

Comment puis-je exécuter de manière interactive une commande sous Linux (zsh, si cela est important) avec un umask différent de celui par défaut, pour une seule commande? Peut-être une combinaison de commandes combinées sur une seule ligne? Le nouveau umask doit s'appliquer uniquement à cette commande et revenir à sa valeur par défaut pour la prochaine commande entrée.

Idéalement, la commande serait indépendante du umask par défaut en vigueur avant sa saisie (en d'autres termes, le umask par défaut n'a pas à être spécifié).

Andrew Ferrier
la source

Réponses:

19

Démarrer un sous - shell :

(umask 22 && cmd)

Ensuite, le nouveau umaskne modifiera que ce sous-shell.

Notez que zshexécute la dernière commande du sous-shell dans le processus du sous-shell au lieu d'en en forger un autre, ce qui signifie que si cette commande est externe, vous ne gaspillez même pas un processus, c'est juste que le fork est fait plus tôt (donc umaskc'est fait dans le processus enfant qui exécutera ultérieurement votre commande).

Stéphane Chazelas
la source
2

Vous pouvez l'envelopper dans un script shell. umask hérite de tous les processus enfants.

cmd.sh:

umask 0022
cmd
Rob Bos
la source
Ou, si vous voulez le faire en une seule ligne de commande, vous pouvez invoquer un shell comme celui-ci, "$ (umask 0022; cmd)"
Rob Bos
1
Je confondais $ (avec $(votre commentaire, maintenant je comprends: ( umask 0022; cmd ).
donothingsuccess
whoops, eh bien, au moins quelqu'un a précisé que ^^
Rob Bos