我试图用umask -S
符号形式显示当前掩码(man umask
在我的系统上,它给我页面 BASH_BUILTINS(1))。但umask
似乎并不像手册页声称的那样:
user$ umask
22
user$ umask -S
umask: Improper mask.
user$ umask -p
umask: Improper mask.
user$ which umask
umask: shell built-in command.
csh
我在RHEL 6.9 上运行它。类似的东西umask 022
工作得很好。为什么行为会与联机帮助页不同?
答案1
由于umask
更改了 shell 的内部状态,因此它必须是 shell 内置函数。
POSIX shellumask
内置有一个-S
选项,因为这是 POSIX 要求,但csh
s 没有。您的umask
手册页记录了umask
的内置函数bash
,而不是csh
.检查 csh 手册页以获取以下文档它是 umask
内置。
没有充分的理由让你想csh
在本世纪使用它,尤其是在 GNU/Linux 系统上,但如果你必须这样做,你总是可以这样做:
sh -c 'umask -S'
以象征性的形式报告这一点umask
。
这将报告umask
正在执行的子进程的sh
,但由于 是在 fork 上继承并在 exec 中保留的,所以它应该与'sumask
相同。csh
umask
无论如何,返回的内容umask
对 没有用csh
,因为csh
的umask
内置函数不支持符号形式。