bash shell 将实际的终端会话存储在哪里?我想读取之前使用过的命令的输出。我在谷歌上搜索到的都是如何存储命令的输出。
由于输出显示在屏幕上,因此无论如何都必须存储在某个地方。所以我的问题是:在哪里?
答案1
Bash 仅存储你运行的命令的历史记录(你可以通过输入history
)。除非你已经设置回滚设置为非常高的数字,则无法查看早于回滚设置值的输出。此外,将此值设置为非常高的数字会使滚动变得缓慢,因为行存储在内存中。
要存储您将来的命令及其输出,有以下几种选择:
使用screen
开始一个屏幕输入 来启动会话screen
。进入屏幕后,按Ctrl- a,然后:,然后输入log
。所有 I/O 都将捕获到screenlog
启动命令的目录中的文件中screen
。
使用script
您可以先输入script
. A脚本会话将启动,将所有 I/O 捕获到名为 的文件中typescript
。您可以script
通过Ctrl-退出会话d 并查看文件中的日志typescript
。
使用tee
球座是一个方便的工具。你可以这样做:
$ bash | tee log.txt
这将在您已运行的 bash shell 中打开一个新的 bash shell。退出后exit
,您可以在名为log.txt
其他方法
正如达斯汀·柯克兰 (Dustin Kirkland) 所建议的那样这发布,您还可以使用屏风。虽然我从来没有使用过终端屏幕录制工具,例如舍尔听起来也是一种选择。
答案2
有很多问题与此相关,但它们都从输出未记录的(正确)假设开始。
所以我的问题是:在哪里?
无处:Bash(以及我所知道的任何其他 shell)的输出均未记录。
由于输出显示在屏幕上,所以无论如何它都必须存储在某个地方。
是的,但很可能不是纯文本,甚至不在磁盘上(尽管这确实取决于终端仿真器):最有可能的是,至少在大多数情况下,在终端仿真器分配的内存段中。
但可以肯定的是,它没有被记录到文件中,至少没有被 shell 记录到文件中,而且我不知道哪些终端仿真器默认将输出记录到文件中。
事实上,这并不意味着不可能记录终端输出:首先我要提到一些我认为很多人都不知道的事情,因为我从未看到有人至少在 Ask Ubuntu 上提到过这一点:Konsole 允许将回滚保存到文件中(也许还有其他终端仿真器提供这样的功能,Konsole 只是我所知道的唯一一个),尽管这受到 Konsole 的回滚大小限制。
但这通常没有什么用,而且很可能您需要研究“适当的”解决方案来将整个会话的输出记录到文件中(如何记录终端会话中的所有输入和输出?和罗恩的回答)。
答案3
有一个名为脚本的命令,如果尚未安装,那么apt-get install script
就会执行它。
然后在终端中输入脚本。
然后做任何你想做的事,完成后只需输入 exit,然后将在你当前目录中创建一个包含所有 stdout 和 stdin 信息的文件。
希望它能帮助你。
答案4
终端会话存储在.bash_history
文件中。在终端中输入此文件echo $HISTFILE
,这将为您提供文件路径.bash_history
。