答案1
您正在尝试将内容更改/opt/Folder
为你自己userid,不是吗?
这是你的命令:
sudo chown -R $USER:$USER /opt/Folder
这在命令行中有效,因为$USER
在执行命令之前会评估变量,因此它的执行方式如下(假设您的用户名是george
):
sudo chown -R george:george /opt/Folder
另一方面,当您使用 运行命令时sudo
,除其他外,$USER
变量将采用目标用户的值,在本例中为root
。因此,通过运行,sudo bash mysetup.sh
您将以mysetup.sh
root 身份运行,因此该命令运行时$USER
设置为root
,并像这样进行评估
sudo chown -R root:root /opt/Folder
您的情况的解决方案是避免在 下运行整个脚本本身sudo
,并让脚本sudo
在必要时使用提升的权限运行特定命令。换句话说,使用bash mysetup.sh
而不是sudo bash mysetup.sh
.
答案2
你还没有提到你正在运行的Linux(或unix)的发行版和版本,所以我在这里切题,假设下面这一行是在你的/etc/sudoers
Defaults requiretty
因此,没有 tty 就无法运行 sudo。当您尝试从脚本运行它时,您的命令sudo
不会运行,从而有效地削弱了您的chown
命令。
尝试添加-t
或-tt
切换到您的 sudo 命令。这些将创建一个伪终端来运行您的sudo
命令链,并希望能够成功,但此选项也有其副作用,此处不予讨论。如果您愿意,可以搜索它们。
如果您有权访问sudo
配置,则可以取出上述线以获得最佳解决方案,但通过此操作,您将消除一层路障,尽管它有多弱。