Permissions 为什么git需要sudo权限来克隆,如果需要,则写入根目录?

Permissions 为什么git需要sudo权限来克隆,如果需要,则写入根目录?,permissions,Permissions,我正在尝试克隆存储库,但出现以下错误: $ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" Cloning Oh My Zsh... fatal: could not create work tree dir '/usr/share/oh-my-zsh': Permission denied Error: git clo

我正在尝试克隆存储库,但出现以下错误:

$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
Cloning Oh My Zsh...
fatal: could not create work tree dir '/usr/share/oh-my-zsh': Permission denied
Error: git clone of oh-my-zsh repo failed
如果在上一个命令之前使用sudo,它会写入根目录,如您所见:

$ sudo sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
The $ZSH folder already exists (/root/.oh-my-zsh).
You'll need to remove it if you want to reinstall.
如何解决这个问题?我知道git clone应该写入当前目录,但它没有!为什么?

这不是Git,这是给你的

install.sh正在尝试克隆存储库。安装位置由ZSH环境变量控制。默认情况下,它将安装到
~/.oh my zsh
中。如果它进入/usr/share/oh my zsh,您就将zsh设置为该值。您没有写入/usr/share的权限。这是正常情况,普通用户不应具有/usr/share权限

当使用
sudo
(即具有root权限)运行时,它确实有权限写入
/usr/share/oh my zsh
,但是
sudo
将清理环境变量,因此没有为命令设置zsh。它以默认的
~/.oh my zsh
运行。通常,sudo应该保留您的主目录,但不知何故,它并没有保留,而是进入root的主目录


如何“修复”这取决于你想要什么。首先,使用
env | sort
检查您的环境中有什么,并确保它们都是正确的

如果您只想自己安装该软件,
unset ZSH
并运行安装程序。它将进入~/oh my zsh

如果要为所有人安装软件,请下载脚本,使用
sudo


这不是Git,这是您正在运行的install.sh脚本。它为您提供了如何解决问题的说明。小心运行您不理解的脚本,尤其是作为root用户。这一个正在尝试将其配置文件(.oh my zsh)安装在root的主文件夹中,而不是您的主文件夹中。我不是以root身份运行,是的,我已经在其他机器上安装了十几次这个软件包,所以我确定我要安装什么。
sudo
以root用户身份执行命令。第一次运行ZSH环境变量时是否设置了它?不,我没有,它会自动执行。是的,我知道sudo=superuser do,但这不会将安装目录也更改为root。这就是发生在我身上的事。这就是我想解释的。谢谢。一切都很好。正如您所说,我的$ZSH变量就是问题所在。
cd /tmp
curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh
sudo ZSH=/usr/share/oh-my-sh sh -c install.sh