安装软件时重定向 stdout 和 stderr

安装软件时重定向 stdout 和 stderr

我希望能够简单地保存 stdout 和 stderr安装软件

我想解决 3 种情况:

  1. 使用 apt-get 时
  2. 使用 apt-get 和 tee 时
  3. 使用 make install 时

1. 使用apt-get时

我在软件安装的上下文中“可视化”stdout 和 stderr 之间的差异时遇到困难。事实上,在安装软件时,您经常会在终端上看到大量输出,其中一些输出经常带有警告。所以在这个背景下”

  • 如果您的安装成功,stderr 会完全为空吗?
  • 或者,如果有警告,标准输出中的“剩余”是什么?
  • 或者您是否建议在这种情况下将 stdout 和 stderr 保存在一起?

无论如何,这行得通吗?

sudo apt-get package 1>output.txt 2>errors.err

2. 使用 apt-get 和 tee 时

实际上,最好不仅将 stdout 和 sterr 保存到文件中,而且仍然可以在我的终端中查看它们。那么使用tee,这会是最好的作品吗?

sudo apt-get package | tee 1>output.txt 2>errors.err

3.使用make install时

我猜事情变得很复杂..会像这样简单吗:

./configure 1>output1.txt 2>errors1.err
make 1>output2.txt 2>errors2.err
make install 1>output3.txt 2>errors3.err

答案1

我将依次讨论这些问题:

$ sudo apt-get install package 1> apt.out 2> apt.err

apt-get如果决定问您问题,这可能会给您带来一些问题。提示将发送到标准输出,并重定向到文件中,并且不会显示给您。如果您想以这种方式使用 apt-get,请使用它的其他选项来抢先回答任何问题 ( apt-get --assume-yes install package 1> apt.out 2> apt.err)。但请注意,预设“是”可能会导致意想不到的后果。

$ sudo apt-get install package | tee 1> apt.out 2> apt.err

这稍微好一点,但首先让我们修复您的调用tee

$ sudo apt-get package 2> apt.err | tee apt.out

您的初始调用未正确调用tee,然后将标准错误tee而不是 of重定向apt-get到错误日志中。

这会工作得更好,但您不会在屏幕上看到任何可能有帮助的信息,这些信息已发送到标准错误,这些信息可能会建议您在apt-get询问您任何问题时的反应。

$ ./configure 1>output1.txt 2>errors1.err
$ make 1>output2.txt 2>errors2.err
$ make install 1>output3.txt 2>errors3.err

这将完全符合您的期望;您最终将得到六个文件,其中包含三个命令的所有标准错误和标准输出。我建议使用稍微不那么深奥的文件名,例如:

$ ./configure 1> configure.out 2> configure.err
$ make 1> make.out 2> make.err
$ make install 1> install.out 2> install.err

但我更倾向于将它们放入两个文件中:

$ ( ./configure && make && make install ) 1> build.out 2> build.err

这会做两件不同的事情:首先,它将所有构建命令放入一个子 shell 中,并神奇地将输出流收集在一起。其次,它使用 shell 的&&运算符来仅有的如果上一个命令成功,则运行下一个命令。

笔记:我还修复了您对apt-get整个过程的调用。

相关内容