将 stdin 分配给文件也会将 stdout 分配给该文件

Assigning stdin to file also assigns stdout to that file

我执行了以下 bash 脚本:

#!/bin/env bash
exec 0<log

我的理解是,它将此 bash 进程的标准输入永久重新分配给日志文件。所以,当我 运行

ls > log

我预计我正在将 "ls" 传递给标准输入。因为我没有重新分配 stdout,所以我还希望在终端中看到 "ls" 命令的结果(我通常会在终端看到 stdout)。但是,我在日志文件中看到了 "ls" 的输出。为什么标准输出在日志文件中而不是终端?

ls 写入为标准输出指定的任何文件。如果没有重定向,那就是它从其父级(您的脚本)继承的任何文件。通过重定向,您明确提供文件 log 用于标准输出。

这与文件 log 的其他用途无关。