我正在尝试在 shell 脚本中检查和更改文件夹的权限。但是,即使已经更改,它也想更改权限。
if [ "$(stat -c '%s' /usr/local/src)" == "755" ];
then
echo "Approved!"
else
echo "Wait please, we're changing the permissions"
sudo chmod -R 755 /usr/local/src
fi
错误:
Wait please, we're changing the permissions
sudo: unable to resolve host john
[sudo] password for john:
sudo: unable to resolve host john
我确实输入了正确的密码。我从来没有得到过Approved!
,为什么?
答案1
我不知道为什么它有效,但我更改'%s'
为'%a'
它解决了我的问题:)
答案2
你需要意识到你在做什么。
man stat
除其他外,还生成格式序列:
The valid format sequences for files (without --file-system):
%a access rights in octal
%A access rights in human readable form
(...)
%s total size, in bytes
正如你所看到的,%s
是尺寸。作为/usr/local/src
目录,大小为4096
.您要寻找的是访问权限,因此要么%a
要么%A
。
输出相应地是,
$ stat -c '%a' /usr/local/src/
2775
或者如果第一个八位字节是0
;则仅 3 位数字和
$ stat -c '%A' /usr/local/src/
drwxrwsr-x
在您的脚本中,这一行:
if [ "$(stat -c '%s' /usr/local/src)" == "755" ];
将替换的输出"$(stat -c '%s' /usr/local/src)"
与字符串进行比较"755"
。调试此问题的一个简单方法是单独运行左侧并检查结果。
$ stat -c '%s' /usr/local/src/
4096
正如您所看到的,这不是一个可以代表访问权限的结果,尽管它的格式相似(4 位数字)。但不能将权限设置为9
,因为它们是八进制的。而八进制表示只有8个代表数字,即0-7。现在是检查我在开头介绍的man
命令页面的时刻。stat
现在应该很容易弄清楚如何修改你的脚本了。