是否可以仅获得 sudo 命令的输出?

Prv*_*dav 1 sudo io-redirection

我想只将 sudo 命令的输出写入某个文件,即在写入 sudo 后我在终端上获得的行即

[sudo] password for user:
Run Code Online (Sandbox Code Playgroud)

如果我使用sudo ls > fileorsudo ls 2> file然后我分别得到整个命令的 stdout 和 stderr 。我也不能使用sudo > fileor sudo 2> file,然后我会得到错误,我应该在 sudo 之后使用一些选项或命令。那么,有可能实现吗?

Kus*_*nda 5

使用sudo -S,该sudo实用程序会将其提示写入标准错误,并从标准输入读取密码。您可以使用2>filename.

请注意,您仍然必须提供sudo要执行的命令,并且命令的标准错误也将被重定向到文件,除非您进行一些文件描述符处理:

sudo -C 4 -S sh -c 'ls non-existant 2>&3' 3>&2 2>sudo.stderr
Run Code Online (Sandbox Code Playgroud)

这将重定向sudoto的输出,sudo.stderr同时仍允许执行的命令写入原始标准错误流。为此,我们将文件描述符 3 作为标准错误的副本打开,然后在我们的命令中显式写入该文件描述符。对于这项工作,我们要问sudo不靠近文件描述符3(它会在默认情况下这样做)。这可能需要管理员closefrom_overridesudoers文件中启用该选项。

请注意,上述命令可能存在微妙的安全问题。