bash 文件中的 sudo bash 和 sudo 命令有啥区别? [复制]
Posted
技术标签:
【中文标题】bash 文件中的 sudo bash 和 sudo 命令有啥区别? [复制]【英文标题】: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
结果是成功。
它们有什么区别?请教我。
【问题讨论】:
【参考方案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
前面)。
【讨论】:
以上是关于bash 文件中的 sudo bash 和 sudo 命令有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
简化bash脚本,以sudo身份运行时从命令中提取第一个单词
我将如何创建一个文本文件并在 bash [重复] 中使用 sudo 权限填充它
Linux下-bash: Permission denied 或者 sudo: command not found 错误