bash shell 输出历史文件位置

Dan*_*off 20 command-line bash output history

bash shell 在哪里存储实际的终端会话?我想读取我之前使用的命令的输出。我只能在谷歌上找到如何存储命令的输出。

由于输出显示在屏幕上,因此无论如何都必须将其存储在某处。所以我的问题是:在哪里?

Ron*_*Ron 18

Bash 仅存储您运行的命令的历史记录(您可以通过键入 检索history)。除非您已经将回滚设置为非常高的数字,否则无法看到比回滚设置值更旧的输出。此外,将此值设置为非常高的数字会使您的滚动缓慢,因为这些行存储在内存中

要存储您未来的命令及其输出,有几个选项:

使用 screen

通过输入启动屏幕会话screen。进入 screen 后,按Ctrl- a,然后按:,然后输入log。所有 I/O 都将screenlog在您启动screen命令的目录中的文件中捕获。

使用 script

您可以从键入开始script。将启动一个脚本会话,它将所有 I/O 捕获到名为typescript. 您可以script通过Ctrl-退出会话d 并查看typescript文件中的日志。

使用 tee

tee是一个方便的工具。你可以这样做:

$ bash | tee log.txt
Run Code Online (Sandbox Code Playgroud)

这将在您已经运行的那个里面打开一个新的 bash shell。当你exit退出时,你可以在名为的文件中看到输出log.txt

其他方法

正如 Dustin Kirkland 在这篇文章中建议的那样,您也可以使用byobu。虽然,我从来没有用过,像Shelr这样的终端截屏工具听起来也是一种选择。


kos*_*kos 6

有很多与此相关的问题,但它们都以(正确的)假设开始,即未记录输出。

所以我的问题是:在哪里?

无处:Bash(以及我知道的任何其他 shell)的输出没有被记录。

由于输出显示在屏幕上,因此无论如何都必须将其存储在某处。

它是,但很可能不是纯文本,甚至不在磁盘上(尽管这实际上取决于终端仿真器):最有可能,至少在大多数情况下,在终端仿真器分配的内存段中。

但是可以肯定它没有记录到文件中,至少没有被 shell 记录,而且我不知道默认情况下将输出记录到文件的终端模拟器。

事实上,这并不意味着不可能记录终端输出:首先我会提到一些我认为没有多少人知道的东西,因为我从未见过至少在 Ask Ubuntu 上有人提到过这一点:Konsole 允许保存回滚到文件(也许还有其他终端模拟器提供这种功能,Konsole 只是我所知道的唯一一个),尽管这受到 Konsole 的回滚大小限制。

不过,这通常不是很有用,而且您很可能希望研究将整个会话的输出记录到文件中的“正确”解决方案(如何在终端会话中记录所有输入和输出?以及Ron 的回答)。