我尝试创建一个单行,用于less在来自标准输入的多屏幕输出的最后一个屏幕上打开。这样做的原因是我正在开发一个产生 long 的程序,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. 有任何想法吗?