如何通过单条命令获取新bash shell实例的umask值
如何通过单条命令获取新bash shell实例的umask值
我完全懂你的困扰——手动开新shell再查umask确实有点繁琐,而且直接用bash -c "umask"得到的结果和预期不符,这其实是bash不同启动模式的差异导致的。
问题根源
你手动输入bash启动的是交互式非登录shell,这种模式下bash会自动加载你的用户级配置文件(比如~/.bashrc);而bash -c "umask"启动的是非交互式shell,它不会读取这些配置文件,所以返回的是当前父shell的umask值,并非新shell实例的。
解决方案
要让bash模拟手动打开新shell的行为,只需要加上-i参数(强制以交互式模式启动),这样它就会加载配置文件,再执行umask命令即可:
bash -i -c "umask"
用你之前的场景测试的话,结果会和手动操作一致:
[ansible@rhel8 ~]$ umask 0027 [ansible@rhel8 ~]$ bash -i -c "umask" 0002
额外补充
如果你的umask设置是在登录shell配置文件(比如~/.bash_profile或~/.profile)里定义的,还可以加上-l参数让bash以登录交互式模式启动:
bash -li -c "umask"
不过大多数日常场景下,仅用-i参数就足够得到你想要的结果了。
备注:内容来源于stack exchange,提问作者M. Fachrizal Utama
相关产品推荐
相关产品推荐

