如何使用 sudo 进行输出重定向?
How to use output redirection with sudo?
我希望将文本从 stdin 写入 root 拥有的文件。
我正在通过 SSH 连接以编程方式执行此操作 - 基本上是通过脚本 - 所以使用文本编辑器是不可能的。没有终端。该过程是完全自动化的。
鉴于可以通过 sudo
获得 [a] 根提升,并且可以使用 cat
重定向写入 [b] 文件,我假设以下方法可行:
ssh user@host sudo cat >the-file
不幸的是,重定向应用于 sudo
,而不是 cat
。在此示例中,如何将重定向应用到 cat
?
执行此操作的正常模式是:
ssh user@host 'cat | sudo tee the-file'
tee
将输出重定向到一个文件,可以 运行 和 sudo
.
如果您想模仿 >>
文件附加到的位置,请使用 sudo tee -a
。
您还需要确保像上面那样引用您的命令,这样管道就不会被本地 shell.
编辑
tee
命令is part of POSIX,所以你可以依赖它现有的。
同时重定向标准错误:
ssh user@host 'some_command 2>&1 | sudo tee output-file'
我希望将文本从 stdin 写入 root 拥有的文件。
我正在通过 SSH 连接以编程方式执行此操作 - 基本上是通过脚本 - 所以使用文本编辑器是不可能的。没有终端。该过程是完全自动化的。
鉴于可以通过 sudo
获得 [a] 根提升,并且可以使用 cat
重定向写入 [b] 文件,我假设以下方法可行:
ssh user@host sudo cat >the-file
不幸的是,重定向应用于 sudo
,而不是 cat
。在此示例中,如何将重定向应用到 cat
?
执行此操作的正常模式是:
ssh user@host 'cat | sudo tee the-file'
tee
将输出重定向到一个文件,可以 运行 和 sudo
.
如果您想模仿 >>
文件附加到的位置,请使用 sudo tee -a
。
您还需要确保像上面那样引用您的命令,这样管道就不会被本地 shell.
编辑
tee
命令is part of POSIX,所以你可以依赖它现有的。
同时重定向标准错误:
ssh user@host 'some_command 2>&1 | sudo tee output-file'