我认为自己是一个高级初学者。知道的足以让我自杀。但到目前为止,我找不到将终端输出到文件的方法。换句话说,将 stdout 和 stderr 更改为文件名。我会在脚本之前执行此操作,然后重置默认值。我不是在问如何重定向。
答案1
stdout 是一个设备文件。您不能更改它的名称,至少,除非您摆弄操作系统。
设备文件很特殊,它们有点像镜子:一个程序向它发送字节,如果另一个程序恰好在观察这些字节,它们将反映到该程序中(/dev/null 和 /dev/zero 除外)*。这是实时完成的。对于在屏幕上记录输出的简单终端程序,它将所有内容发送到 stdout,而终端仿真器(或 TTY)是观察 stdout 的程序。
重定向几乎是实现“重命名 stdout”行为的唯一方法。stdout 并不意味着“打印到终端”,它只是一个吐出发送给它的数据的设备。终端就是读取 stdout 的设备。
通过使用重定向,您可以告诉终端:“不要打印标准输出,而是将反射的数据推送到其他地方。”在这种情况下,您可以将其发送到您选择的文件。
stderr 也是如此。它基本上是 stdout,但用于更重要的警报,但两者的功能完全相同。您可以指定要重定向两者中的哪一个,从而允许您记录两个设备文件的数据。
要将 stdout 和 stderr 发送到单独的文件:
echo -n "foobar" 1> output.log 2> error.log
*这是过于简单的说法。您的磁盘也通过设备文件进行交互,您可以在磁盘上读取和写入原始字节。