bash文件中sudo bash和sudo命令有什么区别?

时间:2016-12-15 04:27:34

标签: bash

我想将一些命令附加到$ {HOME} / .bashrc文件。

我制作了一个脚本来完成它。

# file name : setup_bash
bashrc_path="${HOME}/.bashrc"
comment="test"
sudo echo "${comment}" >> "${bashrc_path}"

并按

运行
bash setup_bash

导致错误。

setup_bash: line 19: /home/user/.bashrc: Permission denied

第19行是(sudo echo ...)。

接下来我尝试了以下代码,

sudo bash setup_bash

它取得了成功。

它们有什么区别?请教我。

2 个答案:

答案 0 :(得分:4)

在命令执行之前,Shell i / o重定向发生。也就是说,当你跑...

sudo echo "some text" >> /some/path

... shell在运行/some/path命令之前打开echo进行输入。这意味着i / o重定向将受sudo命令的影响(因为重定向在sudo运行之前发生 )。另一方面,当你跑...

sudo bash setup_bash

...您正在以root用户身份运行整个脚本,这意味着当需要执行i / o重定向时,脚本已作为root运行并且所以重定向会成功。

答案 1 :(得分:1)

问题在于

sudo echo "${comment}" >> "${bashrc_path}"
shell(STDOUT)重定向(write-append)操作>> "${bashrc_path}"首先由shell完成,当用户调用用户时,甚至在执行main命令之前就完成了。并且可能是调用用户没有权限打开文件进行写入,因此来自shell的权限被拒绝错误消息;这与命令sudo echo ...无关,因为该命令即使在那时也没有开始执行。

现在,当您在调用时使用sudo时,您正在冒充root(默认),因此重定向 - 写入(追加)操作将会成功,(并且您可能已经猜到了你不会这样做) ;甚至现在需要sudo前面的echo