【发布时间】:2016-01-07 22:35:06
【问题描述】:
我尝试在来自标准输入的多屏幕输出的最后一个屏幕上创建一个用于打开less 的单行。这样做的原因是我正在开发一个产生长 AST 的程序,我需要能够上下遍历它,但我更愿意从底部开始。我想出了这个:
$ python a.py 2>&1 | tee >(lines=+$(( $(wc -l) - $LINES))) | less +$lines
首先,我需要计算输出中的行数并从中减去$LINES,这样我就知道最后一个屏幕的最上面一行是什么。稍后我将需要重用a.py 输出,因此我将tee 与进程替换一起用于此目的。作为最后一步,我指向less 在特定行上打开原始标准输出。当然,它在Bash 中不起作用,因为在最后一步中没有设置$lines,因为每个子命令都在子shell 中运行。在ZSH 中,即使管道命令不在子shell 中运行,进程替换仍然存在,因此它也不起作用。这不是家庭作业或工作任务,我只是想知道是否可以在不创建Bash 或ZSH 的临时文件的情况下做我想做的事情。有什么想法吗?
【问题讨论】:
-
为什么python不告诉你它写了多少行?大概可以算……
-
这不应该被迁移。
-
有关通用计算硬件和软件的问题对于 Stack Overflow 来说是题外话,除非它们直接涉及主要用于编程的工具。您可以通过Unix & Linux 获得帮助。
-
@Gilles:有趣的是我在 U&L 上问了这个问题,它被迁移到了这里。
-
我也不明白为什么要迁移它=s