【发布时间】:2017-08-09 06:40:32
【问题描述】:
有什么方法可以在 linux 终端上打印最后打印的行吗?我正在尝试在我的节点应用程序上运行一个执行此操作的命令,以便我可以解析该内容。是否所有的 shell 内容都记录在一个文件中,或者类似的东西?
我想回显控制台自己的内容。获取自己终端的最后输出。
我不想要命令输出我想要获得 console.logs() 和 console.errs()
【问题讨论】:
-
...所以,事情是这样的——这是 terminal 内容,而不是 shell 内容。由您运行的命令编写的内容,除非它的输出通过命令替换等重定向,否则直接进入终端本身;外壳永远不会看到它。
-
您可以在 Linux 上自己演示:如果您运行
ls -l /proc/self/fd/ /proc/$$/fd/,您会注意到 FD 0、FD 1 和 FD 2(stdin、stdout 和 stderr)指向完全相同的位置对于ls(由/proc/self/fd目录的输出确定)和shell 本身(由/proc/$$/fd目录的输出确定)。 -
...对于您的
console.logs()和console.errs(),这是一个shell 和终端都不共享的概念——您必须查看Node 对它们的确切作用。但是,如果将其写入 stdout 或 stderr,则上述所有内容都适用 - 在后一种情况下,与标记为重复的答案的唯一区别是可能需要一些额外的重定向(即2>&1),但我们确实有关于如何捕获标准错误的问题和答案(如果你愿意,我会在重复列表中添加一个)。 -
顺便说一句,如果您要询问特定终端(或以让答案指定要使用的特定终端的方式提出问题),我们可能会能够为您提供更多帮助。例如,询问如何捕获先前写入
tmux中命令的输出的问题很可能会有答案。 -
是的——该文档清楚地表明
console.logs()进入标准输出,console.errs()进入标准错误,因此您可以使用>file或| tee file重定向前者,并且可以合并后者通过>&1使用它,通过单独的日志复制它,例如2> >(tee file.err >&1)等。
标签: node.js linux ubuntu unix terminal