Linux 如何在bash脚本中切换根目录和根目录
所以我知道我能跑Linux 如何在bash脚本中切换根目录和根目录,linux,bash,shell,permissions,sudo,Linux,Bash,Shell,Permissions,Sudo,所以我知道我能跑 $ sudo script 以root用户身份运行脚本 在这个脚本中,我需要以root身份运行一些命令来删除某些目录,但我不能以root身份运行其他一些命令(如果以root身份运行,则会引发错误的bower命令) 现在我有一个工作脚本,它使用sudo-u来转义root,但它真的很恶心: sudo rm -rf ./node_modules ./bower_components sudo npm cache clean sudo npm install sudo -u u
$ sudo script
以root用户身份运行脚本
在这个脚本中,我需要以root身份运行一些命令来删除某些目录,但我不能以root身份运行其他一些命令(如果以root身份运行,则会引发错误的bower命令)
现在我有一个工作脚本,它使用sudo-u来转义root,但它真的很恶心:
sudo rm -rf ./node_modules ./bower_components
sudo npm cache clean
sudo npm install
sudo -u user bower cache clean
sudo -u user bower install
有没有更干净的方法
编辑以回应@Etan Reisner的评论
如果我将脚本更改为
sudo rm -rf ./node_modules ./bower_components
sudo npm cache clean
sudo npm install
bower cache clean
bower install
然后在没有sudo的情况下运行脚本,它会失败并出现错误
bower ESUDO Cannot be run with sudo
我不明白为什么,但是脚本中有任何sudo命令似乎都是以root用户身份运行bower命令。不要使用
sudo
运行脚本。使用sudo
运行您需要成为root用户的命令行,然后运行您希望成为另一个用户的命令行,而无需预先添加sudo
更好的是,将需要根的行放入第二个“外部”脚本,并使用sudo
从作为非根用户运行的“内部”脚本调用该脚本。并确保脚本中没有不需要作为root运行的内容
您甚至可能希望检查您是否不是“外部”或“调用”脚本开头的根,以及您是否是“内部”或“调用”脚本开头的根。如果这些条件失败,则抛出错误消息并返回错误代码。该脚本是否以root用户身份运行?如果是,为什么在前三行有
sudo
?为什么需要使用root为当前用户执行npm命令?这些错误与权限错误有关吗?您可以使用sudo来运行脚本,而不是对每个命令都使用sudo。@Etan希望您删除root命令上的所有sudo,并将sudo保留在bower行中(当脚本以root身份运行时)。这行得通吗?当错误发生时,您是否正在运行sudo脚本
?是的,如果你的脚本是以root用户的身份正常运行的话,我的观点正好相反(你不应该这样做)。如果我以sudo的形式运行一行,那么在它被称为root用户之后的所有行,除非我用-u指定了一个用户,我意识到我不需要其他sudo,尽管在这种情况下,我可以将脚本称为rootsudo@Andrew不这不是sudo
的工作方式。它只会影响你具体给出的命令。我会再试一次,看看我是否解释错了。我也对此感到惊讶,但它似乎正在发生。