我想在 Ubuntu Linux Bash 中远程运行一个任务(这需要相当长的时间)nohup
并重定向stdout
到一个文件,例如:
nohup task > out.txt &
我有时想通过查看输出文件来检查任务的进度:
cat out.txt
我还没有弄清楚如何做到这一点,因为只要 Bash 打开文件进行写入,文件的内容就会显示为空。
所以我的问题是:是否有任何允许“共享”stdout
重定向的linux命令?
答案1
只要 Bash 打开该文件进行写入,该文件的内容就会显示为空。
事实并非如此。实际情况是,任务缓冲器它的输出——它在内存中累积一段时间,然后分块写入文件。内存缓冲区的固定大小为几千字节。这样做是为了性能,因为每个文件写入都有相对较高的开销。因此,您一开始不会看到程序的输出,但您会看到它一点一点地输出。这与bash无关。
如果你想立即看到输出,你可以开始你的程序 unbuffer
(来自expect
软件包)。您可以用性能来换取即时性。
第二个问题是,它将cat
显示已经发出的输出,并在到达文件末尾后立即退出。如果您想在附加输出时继续读取输出,请使用tail
的跟随模式。
nohup unbuffer task >out.txt &
tail -n +1 -f out.txt
按Ctrl+C退出tail
。tail
您可以使用less
和 其跟随模式代替,(按F
;按Ctrl+C停止阅读)。