【问题标题】:What is the difference of sudo bash and sudo command in bash file? [duplicate]bash 文件中的 sudo bash 和 sudo 命令有什么区别? [复制]
【发布时间】:2017-04-30 14:23:21
【问题描述】:

我想在 ${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

结果是成功。

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

【问题讨论】:

    标签: bash


    【解决方案1】:

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

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

    ...shell 在运行echo 命令之前打开/some/path 以供输入。这意味着 i/o 重定向不会受到sudo 命令的影响(因为重定向发生在sudo 甚至运行之前)。另一方面,当您运行时...

    sudo bash setup_bash
    

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

    【讨论】:

      【解决方案2】:

      问题是在

      sudo echo "${comment}" >> "${bashrc_path}"
      

      shell(STDOUT)重定向(写入-追加)操作>> "${bashrc_path}"首先由shell完成,作为用户调用用户,这甚至在执行主命令之前完成。并且大概调用用户无权打开文件进行写入,因此来自 shell 的权限被拒绝错误消息;这与命令 sudo echo ... 无关,因为到那时该命令还没有开始执行。

      现在,当您在调用时使用 sudo 时,您正在模拟 root(默认),因此重定向 - 写入(附加)操作将成功,(并且您可能已经猜到您甚至不需要 @ 987654326@ 现在在echo 前面)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-16
        • 1970-01-01
        • 2011-03-26
        • 2014-08-13
        相关资源
        最近更新 更多