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
的工作方式。它只会影响你具体给出的命令。我会再试一次,看看我是否解释错了。我也对此感到惊讶,但它似乎正在发生。