tee 和 script 本质上是等价的吗?
Are tee and script essentially equivalent?
在我想在文件中捕获进程的 stdout 但仍希望在终端中显示此输出的情况下,我可以在 script
和 tee
。在这种情况下,这些工具在本质上是等同的,还是有一个——可能是微妙的——偏好一个而不是另一个的原因?
程序 script
和 tee
的设计目的不同:
script
-- 制作终端会话的打字稿
tee
-- 管件
script
和 tee
之间的重要区别是:
script
传输它监督的进程的退出状态,而 tee
作为过滤器甚至不知道它。
script
捕获进程的 stdin, stdout, stderr监督,而 tee
只捕获它过滤的流。
None 这些差异与给定上下文相关。
它们的用途非常不同,用法也大不相同。
脚本是记录你在shell会话中所做的事情。方便向教授展示您的工作,向同事展示如何做某事等...
Tee 只是一个可以写入屏幕和文件的应用程序。安装某些东西或 运行 生成大量输出并希望实时查看输出同时仍将其保存到磁盘的命令时非常方便。
两者之间的显着区别是您可以使用脚本创建交互式 shell 来记录所有内容(例如 script commands.log zsh
),包括颜色等。 Tee 不会注册为 tty,因此在这方面它非常不同。
我发现 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 测试 运行 的输出,但有时那里可能有一个调试器,然后光标键等应该可以工作。
在我想在文件中捕获进程的 stdout 但仍希望在终端中显示此输出的情况下,我可以在 script
和 tee
。在这种情况下,这些工具在本质上是等同的,还是有一个——可能是微妙的——偏好一个而不是另一个的原因?
程序 script
和 tee
的设计目的不同:
script
-- 制作终端会话的打字稿tee
-- 管件
script
和 tee
之间的重要区别是:
script
传输它监督的进程的退出状态,而tee
作为过滤器甚至不知道它。script
捕获进程的 stdin, stdout, stderr监督,而tee
只捕获它过滤的流。
None 这些差异与给定上下文相关。
它们的用途非常不同,用法也大不相同。
脚本是记录你在shell会话中所做的事情。方便向教授展示您的工作,向同事展示如何做某事等...
Tee 只是一个可以写入屏幕和文件的应用程序。安装某些东西或 运行 生成大量输出并希望实时查看输出同时仍将其保存到磁盘的命令时非常方便。
两者之间的显着区别是您可以使用脚本创建交互式 shell 来记录所有内容(例如 script commands.log zsh
),包括颜色等。 Tee 不会注册为 tty,因此在这方面它非常不同。
我发现 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 测试 运行 的输出,但有时那里可能有一个调试器,然后光标键等应该可以工作。