我正在运行一个如下所示的脚本。
#!/bin/bash
dat=$(date +%Y%m%d%H%M)
run_sim xmsclst gemm dcs s xec -post_min -d |& tee logx.$dat
这run_sim
是另一个csh
脚本,它调用make
程序来运行一个长时间的模拟。(一个包含 rtl 文件和门级模型的模拟,用于我们的芯片开发)。我发现的问题是:
通常,当模拟模型使用 verilog 的系统调用打印一些内容时,模拟进度会立即显示在 shell 上$display
。但是如果我使用上面的命令,即使用pipeline
和tee
命令,文本输出会被缓冲在某处,不会立即显示在屏幕上,所以我无法知道模拟的状态。只有当我按下 ctrl-C 来停止模拟时,屏幕上才会出现缓冲的显示行,但是我无法恢复模拟,因为它已经停止了。我知道如果我不使用管道和 tee 命令,我可以在模拟过程中看到输出但是我已经开始了模拟,已经过去了 2 个多小时,我今天没有太多时间重复这个模拟过程。
有什么方法可以在不终止模拟的情况下看到模拟进度吗?并且希望不终止进程tee
? (问完这个问题后,我想也许我可以终止该tee
进程,然后文本可能会再次正常显示出来。)
我找到了 [this][1] 。所以正确的方法是:
此
unbuffer
命令使以下程序的输出不缓冲。这样您可以在输出生成后立即看到它。我发现这有效。但我无法在不终止正在进行的进程的情况下应用它。仅终止进程pipe
不会使缓冲输出出现。[1]: https: //stackoverflow.com/questions/11337041/force-line-buffering-of-stdout-in-a-pipeline