为何Shell脚本内执行sudo chmod命令不生效?权限未变更
兄弟,我来帮你排查下为啥你的脚本里sudo chmod没效果。先看你贴的脚本内容:
#!/bin/bash
sudo chmod 757 Folder
大概率是踩了这几个坑中的一个,咱们一个个拆解:
1. sudo需要交互式输入密码,脚本直接跳过了命令
如果你的脚本执行时,没有提前建立sudo会话(比如最近没输过sudo密码),那脚本里的sudo会默默等待你输入密码,但非交互式的脚本不会给你输入机会,直接导致chmod命令根本没执行。
解决办法:
最简单的方式是用
sudo直接运行整个脚本,脚本里就不用加sudo了:
先给脚本加可执行权限:chmod +x your_script.sh然后执行:
sudo ./your_script.sh这时候整个脚本以root身份运行,
chmod自然有权限修改文件夹权限。如果一定要在脚本里用
sudo,可以配置sudoers让你的用户无需密码执行chmod命令(谨慎操作):
用visudo编辑sudoers文件(别直接用编辑器打开,会有语法检查):sudo visudo添加一行(把
your_username换成你的实际用户名):your_username ALL=(ALL) NOPASSWD: /bin/chmod保存退出后,脚本里的
sudo chmod就不会卡密码了。
2. 文件夹路径是相对路径,脚本执行的工作目录不对
如果你脚本里写的是Folder这种相对路径,而你执行脚本时的工作目录不是Folder所在的目录,那sudo chmod根本找不到目标文件夹,自然权限没变化。
解决办法:
把脚本里的路径改成绝对路径,比如/home/your_username/Folder,这样不管在哪个目录执行脚本,都能精准定位到目标文件夹。
3. 脚本本身没加可执行权限(虽能用bash运行,但建议补上)
如果你是用bash your_script.sh方式运行的,这个问题不大,但最好还是给脚本加上可执行权限,避免后续踩坑:
chmod +x your_script.sh
额外小提示:757权限其实不太推荐
757意味着其他所有用户都有对这个文件夹的写入权限,安全性很低,除非你明确知道自己在做什么,否则建议用755(其他用户只读)更稳妥。
你也可以在脚本里加几行调试信息,快速排查问题:
#!/bin/bash echo "当前工作目录:$(pwd)" echo "目标文件夹的绝对路径:$(realpath Folder)" sudo chmod 757 Folder echo "修改后的权限详情:$(ls -ld Folder)"
执行脚本后看输出,就能明确是找不到文件夹,还是命令没执行成功了。
内容的提问来源于stack exchange,提问作者Retchak Amine

