Bash 如何重定向到某个用户创建的文件

Bash 如何重定向到某个用户创建的文件,bash,Bash,在我的脚本中,我多次将输出从终端重定向到文件或其他地方。有时我会为命令指定一个用户,但该用户不在重定向的另一端工作 sudo -i # We are now the root user. sudo -u abc echo 'Something...' > a_file.txt 即使回显是以用户abc的身份完成的,文件也将以root用户的身份创建 我理解为什么会发生这种情况,我希望有人知道一种方法,使它能够按需要工作,从而创建文件a_file.txt,所有者是用户abc。您可以在sudo

在我的脚本中,我多次将输出从终端重定向到文件或其他地方。有时我会为命令指定一个用户,但该用户不在重定向的另一端工作

sudo -i
# We are now the root user.

sudo -u abc echo 'Something...' > a_file.txt
即使回显是以用户abc的身份完成的,文件也将以root用户的身份创建


我理解为什么会发生这种情况,我希望有人知道一种方法,使它能够按需要工作,从而创建文件a_file.txt,所有者是用户abc。

您可以在sudo shell中运行多个命令,然后所有命令都将在同一用户下运行:

sudo -u abc sh -c 'echo sth > a_file.txt'
也可以使用三通管:

sudo -u abc sthRequiringSudo | sudo -u abc tee a_file.txt >/dev/null
或者,您可以将命令传递给sudo shell标准输入:

sudo -u abc -s <<< "echo sth >a_file.txt"
sudo -u abc -s << EOF
echo sth >a_file.txt
echo sthelse >>a_file.txt
EOF
甚至可以将多行命令发送到sudo shell标准输入:

sudo -u abc -s <<< "echo sth >a_file.txt"
sudo -u abc -s << EOF
echo sth >a_file.txt
echo sthelse >>a_file.txt
EOF

sudo echo是无用的,。sudo tee前的jiust。我假设echo只是一个例子。这可能是另一个实际需要sudo的命令,正如问题所示:有时我会为命令指定一个用户。命令可以是任何东西,不一定是echo。无论如何,我不喜欢这个示例。。。我最喜欢的是接近你最后的目的,但我更喜欢:sudo-u abc-s/bin/bash是的,最后一个也是我最喜欢的。我喜欢这个例子,因为它更清楚地说明了最初的问题是什么!