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

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

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

[sudo] password for user:

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

答案1

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

请注意,您仍然需要提供一个命令来sudo执行,并且标准错误为命令也会被重定向到文件,除非你做了一些文件描述符处理:

sudo -C 4 -S sh -c 'ls non-existant 2>&3' 3>&2 2>sudo.stderr

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

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

相关内容