如何实时预处理任何 CLI 工具的输出?

如何实时预处理任何 CLI 工具的输出?

对于上下文,我想做的是将预处理器添加到 REPL,更具体地说,nix repl.尽管这可能适用于任何其他类似 REPL 的应用程序。

其原因是我想在其输出中添加格式化步骤,例如:

$ nix repl
Welcome to Nix 2.17.1. Type :? for help.

nix-repl> ↵

nix-repl> { a = 1; b = 2; c = 3; } ↵
{ a = 1; b = 2; c = 3; }
$ nix repl
Welcome to Nix 2.17.1. Type :? for help.

nix-repl> ↵

nix-repl> { a = 1; b = 2; c = 3; } ↵
{ 
  a = 1; 
  b = 2; 
  c = 3; 
}

在 REPL 之外,我可以通过 来完成此操作nixfmt < <(echo "{ a = 1; b = 2; c = 3; }"),所以我的想法是,如果我可以以某种方式实时预处理 REPL 的所有输出,我可以有条件地应用格式...

我尝试过以多种不同的方式使用unbuffer, stdbuf, socat, 管道,但在我的所有尝试中,要么 STDIN 消失,直到运行下一个命令,根本不显示任何内容,要么 TAB 补全中断。因为有太多不同的答案,我不知道该真正深入探讨哪个。也许我只是错误地使用了这些工具,也许这些工具甚至不是正确的工具,或者如果不实际修改 REPL 二进制文件,这是不可能的。如果有人指出正确的方向,我将不胜感激。

答案1

nix repl似乎没有实现执行此操作的方法。所有 repl 输出都转到标准输出。

您要么必须构建一个程序,对nix repl来自 stdout 的输出进行后处理,以便以标记开头的行之间的所有内容nix-repl>都会传递到nixfmt或将其构建到 Nix 的 repl 代码本身中。

考虑到前者是多么的老套,后者可能会更可取。

相关内容