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

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


2

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

cmd.sh:

umask 0022
cmd

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.