我必须运行此命令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