我只想将 sudo 命令的输出写入某个文件,即写入 sudo ie 后我在终端上得到的行
[sudo] password for user:
如果我使用sudo ls > file
orsudo ls 2> file
那么我会分别获得整个命令的 stdout 和 stderr 。另外我不能使用sudo > file
or 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
。
请注意,上述命令可能存在微妙的安全问题。