从大型 Bash 脚本中的一个命令中删除 sudo

从大型 Bash 脚本中的一个命令中删除 sudo

我有一个很大的 bash 脚本,它应该安装应用程序的所有依赖项,然后构建应用程序本身。

我运行该脚本是sudo因为大多数命令都需要它,例如:

apt update
apt install -y libunwind8
apt install -y curl
...

然后开始构建应用程序:

npm install
npm run build

当脚本到达这两个命令时它会失败,并出现以下错误:

/home/crispjam/.npm/_cacache/tmp/git-clone-98eb9fb8/.git: Permission denied

我对此进行了一些研究,发现与 git 存储库交互时不应该使用sudo

我尝试运行npm install脚本的外部并且它确实起作用了,这表明sudo该命令在脚本内部失败。

我考虑过sudo在里面添加所有命令,而不是使用脚本运行,sudo但我读过这里大多数情况下这并不被认为是好的做法。

在最佳答案中,我读到您可以sudo通过在单个命令前面添加权限来删除该命令的权限sudo -u username

这是好的做法吗?

我怎样才能使其动态化,以便username脚本不使用我的,而是使用运行脚本的用户的名称?

答案1

您是否考虑过更改文件夹权限?

您可以通过右键单击文件资源管理器中的文件夹的属性来检查它。

答案2

答案之一这里建议使用命令logname,打印用户的登录名。

要在脚本中使用它,我只需修改以下行

npm install
npm run build

到:

sudo -u $(logname) npm install
sudo -u $(logname) npm run build

相关内容