为什么需要子shell来执行某些命令?

为什么需要子shell来执行某些命令?

我必须运行此命令sudo sh -c "echo 'nameserver 8.8.8.8' >> /etc/resolv.conf"才能将一行附加nameserver 8.8.8.8/etc/resolv.conf文件中。我知道,这只能通过子shell来实现。

我的问题:

  • 那么如果不在子 shell 中运行命令,这可能吗?

  • 在什么情况下,命令应该在子 shell 中运行?

答案1

sudo echo 'nameserver 8.8.8.8' >> /etc/resolv.conf

失败了,因为它为echo命令赋予了提升的权限(命令不需要),但没有为>>重定向赋予提升的权限(重定向需要,因为目标文件归 root 所有)。将整个命令序列包装起来可以sudo sh解决这个问题。

你也可以这样做

echo 'nameserver 8.8.8.8' | sudo tee -a /etc/resolv.conf

相关内容