gpt4 book ai didi

process - 将多个 stdout/stderr 合并为一个 stdout

转载 作者:行者123 更新时间:2023-12-02 02:00:58 30 4
gpt4 key购买 nike

我有一个运行多个进程的开发堆栈:网络服务器、自动测试、后台编译等。所有这些都是基本的命令行命令,例如 node app.js lein midje :autotest.

是否可以使用一个脚本在“后台”运行所有这些进程,并将它们的输出合并到一个标准输出(即:在终端的屏幕上显示)?

我发现(使用 &)的简单 bash 解决方案的一个问题是,在 Ctrl+C 上,后台进程显然保持事件状态,这是不可取的。

我尝试添加 trap 'kill $(jobs -pr)' SIGINT SIGTERM EXIT 但这似乎在 OS X 上不能可靠地工作 - 令人惊讶的是节点进程被杀死,但是 java脚本退出后仍然存在(通过 Ctrl+C)。

我可以使用任何脚本语言。我更喜欢纯 bash 或 JS,但 Python 或 Ruby 也可以。

我还希望在合并后的输出中保留 ANSI 转义着色。

最佳答案

您可以使用multitail 实用程序。它不仅允许您跟踪日志文件,还允许输出任意 CLI 程序(lein runlein midje :autotest、...)。

例子:

$ multitail --mergeall -cT ANSI -l "lein midje :autotest"-cT ANSI -l "lein ring server-headless"

Ctrl-C 会杀死所有被跟踪的进程。

如果您是 OSX 用户,您可以使用 brew install multitail 安装 multitail(假设您已经安装了 homebrew - 如果没有,请参阅 http://mxcl.github.io/homebrew/)

为了获得更多关于 multitail 配置的信息,您可以阅读 man multitail。在 http://www.vanheusden.com/multitail/index.php 也有使用示例

关于process - 将多个 stdout/stderr 合并为一个 stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17226863/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com