Bagaimana saya bisa mengubah umask hanya untuk satu perintah?

15

Bagaimana saya bisa secara interaktif menjalankan perintah di Linux (zsh, jika itu penting) dengan umask berbeda dari default, hanya untuk satu perintah? Mungkin kombinasi perintah yang digabungkan dalam satu baris? Umask baru harus berlaku hanya untuk perintah itu dan kembali ke nilai default untuk perintah selanjutnya yang dimasukkan.

Idealnya perintah itu agnostik terhadap umask default yang berlaku sebelum dimasukkan (dengan kata lain, umask default tidak harus ditentukan).

Andrew Ferrier
sumber

Jawaban:

19

Mulai subkulit :

(umask 22 && cmd)

Maka yang baru umaskhanya akan mengubah subkulit itu.

Perhatikan bahwa zshmenjalankan perintah terakhir dari subkulit dalam proses subkulit alih-alih forking yang lain, yang berarti bahwa jika perintah itu eksternal, Anda bahkan tidak menyia-nyiakan proses, hanya saja garpu dilakukan lebih awal (jadi umaskselesai dilakukan dalam proses anak yang nantinya akan menjalankan perintah Anda).

Stéphane Chazelas
sumber
2

Anda bisa membungkusnya dalam skrip shell. umask mewarisi semua proses anak.

cmd.sh:

umask 0022
cmd
Rob Bos
sumber
Atau, jika Anda ingin melakukannya dalam satu baris perintah, Anda dapat memanggil shell seperti ini, "$ (umask 0022; cmd)"
Rob Bos
1
Saya bingung $ (dengan $(komentar Anda, sekarang saya mengerti: ( umask 0022; cmd ).
donasi berhasil
ups, well, setidaknya seseorang mengklarifikasi itu ^^
Rob Bos