当 运行 docker-compose with -T 时终端输出损坏

Broken terminal output when running docker-compose with -T

我有一个脚本,用于在某些 docker-compose 容器上启动命令。

脚本 运行s docker-compose exec -T {container} {command}.

我必须使用 -T(禁用伪 TTY 分配。默认情况下 docker compose exec 分配一个 TTY)选项,否则我的预提交挂钩,也 运行 这个脚本, panic: provided file is not a console.

错误

然而,当我在自己的终端上 运行 脚本时,我得到一个损坏的输出,如下所示:

run v1.22.10
            $ vite build
                        vite v2.7.13 building for production...
                                                               transforming...
                                                                              ✓ 378 modules transformed.
                                                                                                        rendering chunks...
                                                                                                                           public/front/assets/Inter-Thin.77d96c1c.woff2                   97.30 KiB
                                                                                                                                                                                                    public/front/assets/Inter-ExtraLight.b6cd094a.woff2             101.79 KiB
                                                                                                                                                                                                                                                                              public/front/assets/Inter-ThinItalic.d82beee8.woff2             104.00 KiB
                                  public/front/assets/Inter-ExtraLightItalic.db229bf3.woff2       108.78 KiB
                                                                                                            public/front/assets/Inter-Light.36b86832.woff2                  101.89 KiB
                                                                                                                                                                                      public/front/assets/Inter-LightItalic.737ac201.woff2            108.72 KiB
                                                                                                                                                                                                                                                                public/front/assets/Inter-Regular.d612f121.woff2                96.55 KiB
                   public/front/assets/Inter-Medium.1b498b95.woff2                 103.44 KiB
                                                                                             public/front/assets/Inter-Italic.900058df.woff2                 104.37 KiB
                                                                                                                                                                       public/front/assets/Inter-MediumItalic.81600858.woff2           109.55 KiB
                                                                                                                                                                                                                                                 public/front/assets/Inter-SemiBold.15226129.woff2               103.32 KiB
     public/front/assets/Inter-SemiBoldItalic.3b6df7d0.woff2         109.42 KiB
                                                                               public/front/assets/Inter-BoldItalic.3f211964.woff2             109.19 KiB
                                                                                                                                                         public/front/assets/Inter-Bold.c63158ba.woff2                   103.65 KiB
                                                                                                                                                                                                                                   public/front/assets/Inter-ExtraBoldItalic.cf6b1d6c.woff2        109.09 KiB
                                                                                                                                                                                                                                                                                                             public/front/assets/Inter-ExtraBold.307d9809.woff2              103.62 KiB
                                                                 public/front/assets/Inter-Black.fc10113c.woff2                  100.46 KiB
                                                                                                                                           public/front/assets/Inter-BlackItalic.bc80081d.woff2            106.20 KiB
                                                                                                                                                                                                                     public/front/assets/TRYVesterbro-Light.59d4e0df.woff2           134.08 KiB
                                                                                                                                                                                                                                                                                               public/front/assets/TRYVesterbro-Regular.cf9a26a9.woff2         139.92 KiB
                                                   public/front/assets/TRYVesterbro-Medium.116a42a4.woff2          142.17 KiB
                                                                                                                             public/front/assets/TRYVesterbro-Bold.ac6caaee.woff2            144.62 KiB
                                                                                                                                                                                                       public/front/assets/TRYVesterbro-ExtraBold.9be0564d.woff2       142.90 KiB

没有 -T 输出很好(每行都正确对齐)但是挂钩将无法使用前面提到的错误。

如果这是相关的,我将 zsh 用于我的 shell,但我在 bash 中尝试了 运行ning,但它也没有解决问题。

有什么方法可以在 docker-compose 中保留 -T 的同时修复终端输出吗?

所以经过调查我发现输出只包含 \n 而不是 \n\r。缺少的 \r 是输出跳过一行但没有回到开头的原因(回车 return)。

我制作了一个简单的 bash 函数,并将其添加到我的 .zshrc 中(您也可以将其添加到您的 .bashrc 中)。

clout() {
  $@ | sed 's/$/\r/'
}

这样使用

clout your_command args

此函数通过管道传输命令的输出,并在看到 \n.

时添加 \r

这是我找到的最佳解决方案。如果有人有更好的解决方案,我仍然愿意接受。