我经常通过管道将程序输出减少到更少,例如
produce_output | less
Run Code Online (Sandbox Code Playgroud)
这很好用,直到produce_output
产生大量输出。如果我搜索文件深处的某些文本,则报告较少
Calculating line numbers... (interrupt to abort)
Run Code Online (Sandbox Code Playgroud)
如果我用 Control+C 中断,它也会杀死produce_output
,这会阻止它产生进一步的输出。有没有办法将中断发送到less,以便produce_output
继续运行?
我知道我可以使用kill -INT less_process
,但我认为必须有更好的解决方案。
我可以在分离的 tmux 会话中运行命令:
tmux new -d 'while true; do date; sleep 1; done'
Run Code Online (Sandbox Code Playgroud)
我可以在附加的 tmux 会话中运行命令并使用以下命令记录控制台输出:
tmux new 'while true; do date; sleep 1; done' \; pipe-pane 'bzip2 > /tmp/log.bz2'
Run Code Online (Sandbox Code Playgroud)
但是如何在分离的 tmux 会话中运行命令并记录控制台输出?以下在分离的 tmux 会话中运行命令,但无法记录输出:
tmux new -d 'while true; do date; sleep 1; done' \; pipe-pane 'bzip2 > /tmp/log.bz2'
Run Code Online (Sandbox Code Playgroud)
我能够得到的最接近的是以下内容,它在非分离的 tmux 中启动命令,开始记录,然后分离:
tmux new 'while true; do date; sleep 1; done' pipe-pane 'bzip2 > /tmp/log.bz2' \; detach
Run Code Online (Sandbox Code Playgroud)
这有效,但在以下之后会在控制台上打印以下乱码:
^[[?62;9;c
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?