我有一个很大的 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