Aja*_*mar 14 command-line pipe less
我正在运行一个服务器,该服务器的日志记录在终端中,而不是任何文件中。我想用less来查看这个日志。
node server.js | less
Run Code Online (Sandbox Code Playgroud)
当我只想查看日志时,我使用按Shift+F到文件末尾并继续查看日志。当我想停止它时,我使用CTRL+ C。
不幸的是,这也会停止服务器。我只想在不停止服务器的情况下停止观看日志的结尾。
这该怎么做?
ter*_*don 19
我在 中找不到任何退出F模式的方法less,因此您必须使用解决方法。例如,将输出保存到 tmp 文件,然后改为观察该 tmpfile:
node server.js > tmpfile & less tmpfile
Run Code Online (Sandbox Code Playgroud)
这&使node.js命令在后台运行。这意味着less tmpfile将立即启动并将跟踪 tmpfile。
进入后less,您可以按F进入关注模式,但现在Ctrl+C不会杀死服务器,它只会停止关注。您现在可以随意滚动并点击F继续关注。
Byt*_*der 15
似乎您通常不应该退出“永远前进”模式,这是手册如何man less命名您按Shift+时进入的模式F。
但是,我发现了一个小技巧,无论如何您都可以恢复正常。不过它会暂时冻结命令,所以我不确定它是否适合你的服务器,它应该可以不间断地运行。
无论如何,这是诀窍:
我假设您已经开始node server.js | less并按Shift+F进入“永远前进”模式。现在less不再对任何按键做出反应。
在这种状态下,您可以按Ctrl+C来终止服务器进程,然后可以less通过按退出Q(但是出于某种原因,这会在您的作业列表中将命令保留为已停止的进程 - 您必须运行fg以继续它并让它完全之后终止),但这不是我们想要的。
相反,您也可以按Ctrl+Z停止(“冻结”)命令并返回到您的 shell 提示符。现在快速输入shell命令fg(“ ˚F矿摹轮”),以便让命令继续在前台运行。请注意,您的node服务器进程也在这段时间内暂停,您必须考虑这是否可以接受。
所以现在less又像以前一样在前台运行了,对吧?是的,但神奇的是它不再处于“永远前进”模式。例如,您可以再次使用箭头键上下滚动。
不幸的是,less似乎已完全停止更新其缓冲区,您只能向下滚动到之前冻结命令的行,而不能再向下滚动。该node服务器仍在运行并产生输出虽然,我们只是要得到less再次刷新。
我发现最简单的方法是简单地打开less' 帮助屏幕并再次关闭它,通过按键H和Q顺序。现在一切似乎又正常了。
然而,最干净的解决方案可能是遵循terdon 的回答并将输出重定向到临时文件,less用于监视文件。