输出重定向由调用命令的外壳完成。因此,将所有内容分解为零,这是正在发生的事情*:
- shell invokes - sudo echo "options drm_kms_helper poll=N",它- sudo通过- echo "options drm_kms_helper poll=N"命令行执行命令
 
- sudo要求输入密码,打开超级用户外壳程序并调用- echo "options drm_kms_helper poll=N",然后运行- echo传递该命令的命令- "options drm_kms_helper poll=N"
 
- echo,以- root特权运行,将字符串输出到其标准输出。
 
- echo命令终止,超级用户外壳退出,- sudo终止
 
- 从中调用命令的shell收集输出,并尝试将其重定向到- /etc/modprobe.d/local.conf,该目录只能由root写入。它得到“权限被拒绝”错误。
 
有关解决此问题的方法,请参见@shantanu答案。
(*)-尽管上述顺序有助于理解命令失败的原因,但实际上事情会有些混乱:原始shell会注意到重定向,并在调用sudo ...命令之前尝试打开文件进行写入。当打开文件失败时,shell甚至不会调用应该写入文件的命令(感谢@PanosRontogiannis指出了这一点)。
这是一个快速测试:
$ touch ./onlyroot.txt
$ sudo chown root:root ./onlyroot.txt
$ sudo bash -c "whoami | tee who.txt" > onlyroot.txt
bash: onlyroot.txt: Permission denied
在上面的测试中,whoami | tee who.txt打算创建一个who.txt包含单词“ root”的文件。但是,当调用外壳程序中的输出重定向失败时,也会丢失“ who.txt”文件,因为未调用命令。
               
              
saji@laptop:~$ sudo echo "Hi" [sudo] password for saji: Hi