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


15

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

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

Answers:


19

启动一个子shell

(umask 22 && cmd)

然后,新的umask只会更改该子外壳。

注意,zsh在子shell进程中执行子shell的最后一个命令,而不是派生另一个命令,这意味着,如果该命令是外部的,则您甚至没有浪费一个进程,只是前叉已经完成(因此umask完成了)在子进程中,该子进程稍后将执行您的命令)。


2

您可以将其包装在shell脚本中。umask继承所有子进程。

cmd.sh:

umask 0022
cmd

或者,如果您想在一个命令行中执行此操作,则可以调用如下外壳程序:“ $(umask 0022; cmd)”
Rob Bos

1
我困惑$ ($(您的评论,现在我明白了:( umask 0022; cmd )
donothingsuccessly 2013年

哦,好吧,至少有人澄清了^^
Rob Bos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.