我想仅将 sudo 命令的输出写入某个文件,即我在编写 sudo 后在终端上得到的行,即
[sudo] password for user:
如果我使用sudo ls > file
orsudo ls 2> file
然后我分别得到整个命令的 stdout 和 stderr 。我也不能使用sudo > file
or sudo 2> file
,然后我会得到错误,我应该在 sudo 之后使用一些选项或命令。那么,有没有可能实现呢?
我想仅将 sudo 命令的输出写入某个文件,即我在编写 sudo 后在终端上得到的行,即
[sudo] password for user:
如果我使用sudo ls > file
orsudo ls 2> file
然后我分别得到整个命令的 stdout 和 stderr 。我也不能使用sudo > file
or sudo 2> file
,然后我会得到错误,我应该在 sudo 之后使用一些选项或命令。那么,有没有可能实现呢?
使用
sudo -S
,该sudo
实用程序会将其提示写入标准错误,并将从标准输入读取密码。您可以使用 捕获标准错误的输出2>filename
。请注意,您仍然必须提供要执行的命令,并且该
sudo
命令的标准错误也将被重定向到文件,除非您进行一些文件描述符杂耍:这将重定向到的输出,
sudo
同时sudo.stderr
仍然允许执行的命令写入原始标准错误流。我们通过打开文件描述符 3 作为标准错误的副本来做到这一点,然后在我们的命令中显式写入该文件描述符。为此,我们必须要求sudo
不要关闭文件描述符 3(默认情况下会这样做)。这可能需要管理员启用文件closefrom_override
中的选项sudoers
。请注意,上述命令可能存在细微的安全问题。