gpt4 book ai didi

linux - 使用 `exec 1>file` 后,如何停止将 STDOUT 重定向到文件并恢复 STDOUT 的正常操作?

转载 作者:IT王子 更新时间:2023-10-29 00:39:10 24 4
gpt4 key购买 nike

我是 shell 脚本的新手,我使用的是 Ubuntu-11.10。在使用 exec 1>file 命令后的终端中,无论我向终端发出什么命令,其输出都不会显示在终端中。我知道 STDOUT 被重定向到文件,这些命令的输出被重定向到文件。

我的问题在这里

  1. 一旦我使用exec 1>file,我该如何摆脱它?即如何停止 STDOUT 到文件的重定向并恢复 STDOUT 的正常操作(即重定向到终端而不是文件)?

    我尝试使用 exec 1>&- 但它不起作用,因为这会关闭 STDOUT 文件描述符。

  2. 请阐明exec 1>fileexec 1>&-

    的整个操作
  3. 如果我们使用 exec 0>&- exec 1>&- 关闭标准文件描述符 0、1、2 会发生什么执行 2>&-?

最佳答案

Q1

在执行初始 exec 之前,您必须为恢复做好准备:

exec 3>&1 1>file

稍后要恢复原始标准输出:

exec 1>&3 3>&-

第一个 exec 将原始文件描述符 1(标准输出)复制到文件描述符 3,然后将标准输出重定向到命名文件。第二个exec再次将文件描述符3复制到标准输出,然后关闭文件描述符3。

Q2

这有点开放式。它可以在 C 代码级别或 shell 命令行级别进行描述。

exec 1>file

只是将 shell 的标准输出 (1) 重定向到指定文件。文件描述符一现在引用命名文件;写入标准输出的任何输出都将转到文件。 (请注意,交互式 shell 中的提示将写入标准错误,而不是标准输出。)

exec 1>&-

简单地关闭 shell 的标准输出。现在没有用于标准输出的打开文件。如果程序在没有标准输出的情况下运行,它们可能会感到不安。

Q3

如果您关闭所有三个标准输入、标准输出和标准错误,交互式 shell 将在您关闭标准输入时退出(因为它在读取下一个命令时将获得 EOF)。 shell 脚本将继续运行,但它运行的程序可能会感到不安,因为它们保证有 3 个打开的文件 channel ——标准输入、标准输出、标准错误——并且当你的 shell 运行它们时,如果没有其他 I/O 重定向, 然后他们就得不到他们 promise 的文件 channel ,一切都可能会崩溃(你会知道的唯一方法是命令的退出状态可能不会为零——成功)。

关于linux - 使用 `exec 1>file` 后,如何停止将 STDOUT 重定向到文件并恢复 STDOUT 的正常操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25474854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com