如何在bash脚本中切换进出root

时间:2015-02-26 18:50:18

标签: 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 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命令。

1 个答案:

答案 0 :(得分:1)

不要使用sudo运行脚本。使用sudo运行您需要为root用户的命令行,然后运行您希望成为其他用户的行,而不预先sudo

更好的是,将需要root的行放入第二个“外部”脚本,并使用您作为非root用户运行的“内部”脚本中的sudo调用该脚本。并确保该脚本中的不需要以root身份运行。

你甚至可能想要检查你在“外部”或“调用”脚本的开头是不是root用户,并且你是“内部”或“被调用”的开头的根。如果这些条件失败,请吐出错误消息并返回错误代码。