chown 无法通过脚本工作

chown 无法通过脚本工作

我有一个脚本:

#! /bin/bash
sudo chown -R $USER:$USER /opt/Folder

chown 似乎没有执行。

如果我只是从终端写上面的行,它运行得很好!

我读过了但没有帮助。

脚本的名称是 mysetup.sh,我正在运行 sudo sh mysetup.sh

它不提供任何输出。

如果我像这样运行它sudo bash -x mysetup.sh,我会收到:

sudo chown -R root:root /opt/Folder

这个问题不涉及,因为用户已设置。

答案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.shroot 身份运行,因此该命令运行时$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配置,则可以取出上述线以获得最佳解决方案,但通过此操作,您将消除一层路障,尽管它有多弱。

相关内容