Jak mogę zmienić umask tylko na jedno polecenie?

15

Jak mogę interaktywnie wykonać polecenie w systemie Linux (zsh, jeśli ma to znaczenie) z innym umask od domyślnego, tylko dla jednego polecenia? Być może kombinacja poleceń połączonych w jednym wierszu? Nowy umask powinien mieć zastosowanie tylko do tego polecenia i powrócić do domyślnej wartości dla następnego wprowadzonego polecenia.

Idealnie byłoby, gdyby polecenie było niezależne od domyślnego umask obowiązującego przed jego wprowadzeniem (innymi słowy, domyślny umask nie musi być określony).

Andrew Ferrier
źródło

Odpowiedzi:

19

Uruchom podpowłokę :

(umask 22 && cmd)

Wtedy nowy umaskzmieni tylko tę podpowłokę.

Zauważ, że zshwykonuje ostatnie polecenie podpowłoki w procesie podpowłoki zamiast rozwidlania innego, co oznacza, że ​​jeśli to polecenie jest zewnętrzne, to nawet nie marnujesz procesu, po prostu rozwidlenie jest wykonywane wcześniej (więc umaskjest zrobione w procesie potomnym, który później wykona polecenie).

Stéphane Chazelas
źródło
2

Możesz owinąć go w skrypt powłoki. umask dziedziczy po wszystkich procesach potomnych.

cmd.sh:

umask 0022
cmd
Rob Bos
źródło
Lub, jeśli chcesz to zrobić w jednym wierszu poleceń, możesz wywołać powłokę w ten sposób: „$ (umask 0022; cmd)”
Rob Bos
1
I mylić $ (ze $(w swoim komentarzu, teraz rozumiem: ( umask 0022; cmd ).
zebranie zakończone sukcesem
ups, cóż, przynajmniej ktoś wyjaśnił, że ^^
Rob Bos