在每个非登录非交互式 shell 命令之前设置 umask

在每个非登录非交互式 shell 命令之前设置 umask

我正在使用 PHP 脚本连接到 ssh 服务器。它执行一个命令并退出。连接到非交互式和非登录 shell。因此,它不会加载.bashrc.bash_profile文件,所以我无法umask在那里正确设置。我在 google 上搜索了一些有关 ssh 内部工作原理的信息,似乎我可以~/.ssh/rc在 ssh 连接后使用 file 来执行一些命令。我的~/.ssh/rc 在服务器上我正在连接:

#!/bin/bash

echo "Setting umask to 002"
umask 002
echo "Umask set"

问题是我的 umask 设置不正确。当我运行脚本并umask在服务器上运行命令时,我得到0022umask :

Run: cd /local/web/ && umask
> Setting umask to 002
> Umask set
> 0022

为什么它不起作用?

答案1

umask仅当由内置命令运行时才有效。

不要按名称调用脚本,而是调用. script以使其由当前 shell 进程执行。

然而,如果您对打印的值感到困惑,0022而不是022,则没有区别,这些值是相同的。

尝试 POSIXumask -S以获得更好理解的输出。

相关内容