Syn*_*ech 5 script port command-line
回到大学,当我们必须提交 CS 作业时,我们必须执行一系列步骤,包括运行script, date, whoami, etc.
,然后运行我们的程序。
该script
命令会将发送到显示器的所有文本也通过管道传输到显示器和指定文件。
从那以后,我一直在寻找 Dos 和/或 Windows 版本,但一直没有找到。有些程序可以重定向到一个文件,但随后显示没有回显,有些程序似乎根本无法使用重定向。
有任何想法吗?
编辑:
到目前为止,我得到的答案似乎与标准重定向命令 ( <, >, |
)完全一样。这些不适用于所有程序。例如,Microsoft C++ 编译器 CL.EXE。如果您cl /?
通过重定向命令运行或通过另一个程序(例如 TEE)运行它,您将不会获得标题/横幅文本。
另一个例子是我用 Pascal 写的一个程序(我认为最后一次编译是在 FreePascal 中)。帮助文本根本不会被重定向。我已经看到这种情况发生在其他程序以及 MKISOFS 中。它有很长的帮助文本,但不能通过通过 MORE 管道或重定向到文件来暂停!
多年来,我一直想知道这个问题。我曾经认为可能是因为文本被直接写入屏幕(例如端口B800)或其他什么,但我还没有确定原因,更不用说找到可以完成这项工作的程序了。
好吧,像往常一样,我自己编写了程序。今晚我有一点空闲时间,并组装了一个本机(即非 Cygwin)测试程序,该程序完全按照我的希望工作,尽管有两个限制。(我没有\xe2\x80\x99t有一个永远在线的主机,但我\xe2\x80\x99会清理程序,编写文档并发布它。)
\n它无法捕获直接写入视频硬件(或虚拟化硬件,视情况而定)的程序的输出,因此我提到的 Pascal 程序无法捕获,除非我在没有设置直接标志\ xe2\x80\x94 的情况下重新编译它,顺便说一下,当我用 FreePascal 重新编译它时就不需要了。
\n它无法接收来自stderr的输入。例如,如果执行cl /? | script.exe c:\\test.log
,则仅将 Microsoft 编译器的帮助文本发送到该文件;横幅只会显示在屏幕上。(由于程序的工作方式,这有点令人困惑,因此我\xe2\x80\x99m 将研究它。)
对于问题(1),\xe2\x80\x99 几乎无能为力(如果某个地方有一些聪明的人可以找到一种方法来拦截直接屏幕写入,我不会感到惊讶,但出于所有意图和目的,它\xe2\x80\x99s 可能不太可能。)
\n问题(2)可以通过在管道传输之前将 stderr 重定向到 stdout 来解决,如下所示。它\xe2\x80\x99s 不太漂亮(或者不方便,但它有效)。
\ncl /? 2>&1| script.exe c:\\test.log\n
Run Code Online (Sandbox Code Playgroud)\n它可能/应该也可以从程序\xe2\x80\x99s端工作,从而简化管道,但我还没有找到任何关于如何工作的信息(至少在\xe2\x80\x9cnormal/official\xe2\x80\ x9d 方式,例如通过 C++)。我确实有一个想法,在中断向量表中安装一个中断处理程序来拦截对公共输出 API 函数的调用,这可能/可能会起作用。事实上,在 1998 年,我编写了一个实验性的 DOS TSR(也可以在 Windows NTVDM 中工作),它在将输出函数发送到屏幕之前拦截它们并对其进行着色(即通用语法着色)。对其进行调整以将副本发送到文件将会/应该很容易。
\n 归档时间: |
|
查看次数: |
3623 次 |
最近记录: |