Tee和Script本质上是等价的吗?

3
在我想要将进程的标准输出(stdout)捕获到一个文件中,但仍希望在终端显示此输出的情况下,我可以选择使用 script 和 tee。在这种情况下,这些工具基本上等效,还是有一个 – 可能微妙 – 的理由更喜欢其中一个? 程序 script 和 tee 是为不同目的设计的: - script -- 记录终端会话的类型 - tee -- 管道连接适配器
script 和 tee 之间的重要区别包括: - script 传输它监控的进程的退出状态,而 tee 作为过滤器,则根本不知道它。 - script 捕获要监控的进程的stdin、stdout、stderr,而 tee 只捕获它过滤的流。
在给定的上下文中,这些差异都不相关。
2个回答

5
他们有着非常不同的目的,使用方法也很不一样。
- Script 是用来记录您在 shell 会话中所做的操作。非常方便,可以向教授展示您所做的事情,向同事展示如何做某事等等。 - Tee 只是一个应用程序,可将内容同时输出到屏幕和文件中。当安装某些东西或运行生成大量输出并希望实时查看输出同时保存到磁盘时,非常方便。
两者之间值得注意的一个区别是,您可以使用 script 创建一个交互式 shell 来记录所有内容(例如 script commands.log zsh),包括颜色等。Tee 不会被注册为 tty,因此在这方面它与 script 相差很远。

3

我发现在使用管道tee时,script很有用,可以使控制序列正常工作:

script -q -c 'python -c "import pdb, sys; pdb.set_trace()"' /dev/null \
| tee -a /tmp/tmp.txt

仅需以下代码,Ctrl-A 就会显示为 ^A 等:
python -c "import pdb, sys; pdb.set_trace()" | tee -a /tmp/tmp.txt

这是一个最简示例。我在这里使用tee来捕获pytest测试运行的输出,但有时可能会有调试器,此时应该可以使用光标键等功能。
通过https://unix.stackexchange.com/a/61833/1920获得。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接