如何仅更改一个命令的 umask?

And*_*ier 19 zsh umask

如何使用与默认值不同的 umask 在 Linux(zsh,如果重要)中交互式执行命令,仅用于一个命令?也许将命令组合在一行中?新的 umask 应仅应用于该命令,并为输入的下一个命令返回其默认值。

理想情况下,该命令在输入之前与有效的默认 umask 无关(换句话说,不必指定默认 umask)。

Sté*_*las 25

启动一个子shell

(umask 22 && cmd)
Run Code Online (Sandbox Code Playgroud)

那么新的umask只会改变那个子shell。

注意,zsh在子shell进程中执行子shell的最后一个命令而不是fork另一个,这意味着如果那个命令是外部的,你甚至没有浪费一个进程,只是fork更早完成了(所以umask完成了在稍后将执行您的命令的子进程中)。