echo >>regular_file 与 echo >>&fd:一个关闭,另一个不关闭

echo >>regular_file 与 echo >>&fd:一个关闭,另一个不关闭

根据我的观察,回显到常规文件echo >>regular_file会打开该文件,追加到该文件,然后关闭该文件。而 echo 到打开的文件描述符echo >>&fd* 不会关闭它。这种行为是否记录在 bash/zsh 手册中?

* 这里的 fd 可以是一个数字,比如3.

答案1

该语法echo >>&fd不是由 POSIX、Bash 或 zsh 定义的,我假设您的意思是echo >&fd.这两个操作都涉及文件描述符复制,但第一个操作涉及首先打开指定的文件。在echo >>regular_file(相当于echo 1>>regular_file,其中 fd1是标准输出)shell 首先opens regular_file,该操作返回一个文件描述符,然后将返回的 fddup链接到标准输出 fd 1,然后关闭前者。命令完成执行后,fd1被“恢复”(如果创建了 a,则不一定完成fork,但无论以何种方式完成,fd1都引用执行命令之前引用的同一文件)。

第二个命令echo >&fd(同样,相当于echo 1>&fd)仅复制fd到 stdout 和不关闭fd. 再次,执行命令后恢复标准输出。

将第一个操作称为重定向,将第二个操作称为文件描述符复制会更清楚,如 POSIX shell 命令语言和其他 shell 所记录的那样。

相关内容