在我想要捕获文件中进程的 stdout 但仍希望在终端中显示此输出的上下文中,我可以在script
和{{1}之间进行选择}}。在这种情况下,这些工具本质上是等价的还是有一个 - 可能是微妙的 - 理由更喜欢一个而不是另一个?
程序tee
和script
是出于不同目的而设计的:
tee
- 制作终端会话的打字稿script
- 管道配件 tee
和script
之间的重要差异是:
tee
传输其监控的流程的退出状态,而作为过滤器的script
甚至不知道它。tee
捕获其监控的进程的 stdin , stdout , stderr ,script
仅捕获流过滤器。这些差异在给定的背景下都不相关。
答案 0 :(得分:5)
它们的目的非常不同,用法也大不相同。
脚本用于记录您在shell会话中执行的操作。方便向教授展示你做了什么,向同事展示如何做某事等等......
Tee只是一个写入屏幕和文件的应用程序。在安装或运行生成大量输出的命令时非常方便,并且希望在将输出保存到磁盘时实时查看输出。
两者之间的显着差异在于您可以使用脚本创建交互式shell来记录所有内容(例如script commands.log zsh
),包括颜色等。 Tee不会注册为tty,所以在这方面它非常不同。
答案 1 :(得分:2)
我发现script
对于在管道到tee
时控制序列的工作非常有用:
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测试运行的输出,但有时可能会有一个调试器,光标键等应该可以工作。