将 _sudo_ 的 PID、stderr 和 stdout 重定向到文件
Redirect _sudo_ 's PID, stderr and stdout to file
_user_
如何重定向 PID
以及 sudo
的 stdout
和 stderr
(以及不是它产生的子shell)到文件?
即sudo
密码请求 ([sudo] password for _user_: _
) 和通常由 sudo
发送到当前 shell 的 stdout
和 stderr
的任何错误都应该被重定向到任何适当的文件 /path/foobar
,本着:
{sudo-process} &> >(tee /path/foobar > /dev/null)
或
{sudo-process} 2>&1 | tee /path/foobar &>/dev/null)
就 stdout
和 stderr
而言。在我的用例中,还需要 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
是否是具有适当写入权限的文件,即可以访问 cmd
对 stdout
和 stderr
的重定向。这不是问题。
编辑:
@JohnKugelman 建议 运行 sudo -n
导致 sudo
向 stderr
发出错误消息并死掉,以防需要密码。负责:
- 重定向 stdout
,因为还有 none。
- 需要存储 sudo
的 PID,因为进程会自行终止。
主要问题仍然存在:如何将 sudo
的 stderr
重定向到文件?
要将 sudo 的 stderr 重定向到文件:
sudo -n cmd -- &> /path/of/the/file
_user_
如何重定向 PID
以及 sudo
的 stdout
和 stderr
(以及不是它产生的子shell)到文件?
即sudo
密码请求 ([sudo] password for _user_: _
) 和通常由 sudo
发送到当前 shell 的 stdout
和 stderr
的任何错误都应该被重定向到任何适当的文件 /path/foobar
,本着:
{sudo-process} &> >(tee /path/foobar > /dev/null)
或
{sudo-process} 2>&1 | tee /path/foobar &>/dev/null)
就 stdout
和 stderr
而言。在我的用例中,还需要 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
是否是具有适当写入权限的文件,即可以访问 cmd
对 stdout
和 stderr
的重定向。这不是问题。
编辑:
@JohnKugelman 建议 运行 sudo -n
导致 sudo
向 stderr
发出错误消息并死掉,以防需要密码。负责:
- 重定向 stdout
,因为还有 none。
- 需要存储 sudo
的 PID,因为进程会自行终止。
主要问题仍然存在:如何将 sudo
的 stderr
重定向到文件?
要将 sudo 的 stderr 重定向到文件:
sudo -n cmd -- &> /path/of/the/file