将 sudo echo "xyz" 的输出重定向到文件时,为什么会出现“权限被拒绝”?

amp*_*ent 11 permissions sudo io-redirection

为什么我得到

-bash: test: Permission denied
Run Code Online (Sandbox Code Playgroud)

当我跑

sudo echo "xyz" > test
Run Code Online (Sandbox Code Playgroud)

目录权限为:

drwxr-xr-x 3 root root 4096 2014-08-05 16:26 
Run Code Online (Sandbox Code Playgroud)

我在目录中使用sudo. 但是为什么我不能 sudo 回声呢?

小智 16

发生这种情况是因为您仅以echoroot 身份运行命令。输出重定向由您的(非根)shell 处理。为避免这种情况,请不要使用 shell 的重定向并使用实际命令来处理写入:tee. 你想做的事情可以这样做:

echo "xyz" | sudo tee test > /dev/null
Run Code Online (Sandbox Code Playgroud)

(如果你不重定向输出,tee也会输出xyz到标准输出)