将 _sudo_ 的 PID、stderr 和 stdout 重定向到文件

Redirect _sudo_ 's PID, stderr and stdout to file

_user_ 如何重定向 PID 以及 sudostdoutstderr(以及不是它产生的子shell)到文件?

sudo 密码请求 ([sudo] password for _user_: _) 和通常由 sudo 发送到当前 shell 的 stdoutstderr 的任何错误都应该被重定向到任何适当的文件 /path/foobar,本着:
{sudo-process} &> >(tee /path/foobar > /dev/null)
{sudo-process} 2>&1 | tee /path/foobar &>/dev/null)
stdoutstderr 而言。在我的用例中,还需要 PID 才能从具有适当权限的外部脚本无人看管地杀死 sudo 进程。

"current shell" 是指 sudo 进程所在的 shell。 我得到的最远的是一个可能的 askpass 程序(参见 man 8 sudo 中的选项 -A)和使用 plugins 的可能性,这可能相关也可能不相关。我对此完全没有经验。 你能帮忙吗?


注意:我没有在将 sudo 产生的 shell 的输出重定向到文件 .如:
$ sudo cmd &> /path/foobar$ sudo sh -c 'cmd &> /path/foobar'
取决于 /path/foobar 是否是具有适当写入权限的文件,即可以访问 cmdstdoutstderr 的重定向。这不是问题。

编辑:
@JohnKugelman 建议 运行 sudo -n 导致 sudostderr 发出错误消息并死掉,以防需要密码。负责:
- 重定向 stdout,因为还有 none。
- 需要存储 sudo 的 PID,因为进程会自行终止。

主要问题仍然存在:如何将 sudostderr 重定向到文件?

要将 sudo 的 stderr 重定向到文件:

sudo -n cmd -- &> /path/of/the/file