Answers:
您正在使用less
在这一点上,但^ C则表现不同,由于它是如何被调用journalctl
。journalctl传递的标志less
包括以下默认值:
FRSXMK
其中,我认为“ K”选项适用于此处:
-K或--quit-on-intr 键入中断字符(通常为^ C)时,较少导致立即退出(状态2)。通常,使用中断字符可以减少执行任何操作并返回其命令提示符的可能性。请注意,使用此选项将无法从“ F”命令返回到命令提示符。
因此,在您的环境中设置$ SYSTEMD_LESS并省略“ K”选项应该可以解决此问题,它在Ubuntu 16.04上的测试中不起作用:
SYSTEMD_LESS="FRSXM"journalctl -u nginx
但是,您可以通过比较以下变体的行为来获得想要确认K标志相关的行为:
# ^C after Shift-F does not completely quit
journalctl -u nginx | less -FRSXM
# ^C after Shift-F completely quits
journalctl -u nginx | less -FRSXMK
我也刚刚经历了这个令人讨厌的怪癖。
设置SYSTEMD_LESS
确实不起作用,因为journalctl SIGTERM
在收到^ C时会将a发送给寻呼机。
我的“解决方案”是使用bash别名,如下所示:
alias log='SYSTEMD_COLORS=1 journalctl | less -FRSXM'
这将覆盖默认的寻呼机,并且在您中断跟随时不会退出。
环境变量SYSTEMD_COLORS
似乎是唯一具有颜色并在运行后保持较少运行的方法SIGINT
。
这适用于我的Debian 9安装。
journalctl | less
可能是一个错误。
SYSTEMD_LESS
,但我确认这确实会更改发送到的标志less
。您可以通过查找less
和执行的PID进行检查hd /proc/<pid>/environ
。查找环境变量LESS
。它将在那里但为空(通常是FRSXMK
)。您也可以键入_K
较少的内容,以查看是否设置了该标志。通常是这样。如果通过SYSTEMD_LESS=
,则不是。我认为journalctl进程在获得寻呼机时会发出信号SIGINT
,这就是less
无论设置如何都将死亡的原因。