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

Avi*_*Raj 1 command-line

我必须运行此命令sudo sh -c "echo 'nameserver 8.8.8.8' >> /etc/resolv.conf"才能nameserver 8.8.8.8/etc/resolv.conf文件中附加一行。我知道,只有通过子外壳才有可能。

我的问题:

  • 在子shell中不运行命令是否有可能?

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

ste*_*ver 6

sudo echo 'nameserver 8.8.8.8' >> /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

失败,因为它为echo命令(不需要它)提供了提升的权限,而不是>>重定向(这样做,因为目标文件归 root 所有)。包装整个命令序列sudo sh克服了这一点。

你也可以这样做

echo 'nameserver 8.8.8.8' | sudo tee -a /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)