T恤和脚本基本相同吗?

时间:2015-02-19 08:20:04

标签: shell monitoring tee

在我想要捕获文件中进程的 stdout 但仍希望在终端中显示此输出的上下文中,我可以在script和{{1}之间进行选择}}。在这种情况下,这些工具本质上是等价的还是有一个 - 可能是微妙的 - 理由更喜欢一个而不是另一个?


程序teescript是出于不同目的而设计的:

  • tee - 制作终端会话的打字稿
  • script - 管道配件

teescript之间的重要差异是:

  • tee传输其监控的流程的退出状态,而作为过滤器的script甚至不知道它。
  • tee捕获其监控的进程的 stdin stdout stderr script仅捕获流过滤器。

这些差异在给定的背景下都不相关。

2 个答案:

答案 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测试运行的输出,但有时可能会有一个调试器,光标键等应该可以工作。

通过https://unix.stackexchange.com/a/61833/1920