找出 Alpine 和“普通”Linux(例如 Ubuntu)之间的 coreutils 不兼容性

找出 Alpine 和“普通”Linux(例如 Ubuntu)之间的 coreutils 不兼容性

我曾与不工作的 gitlab 构建作斗争。

我需要通过删除一些不可打印的内容来清理 psql 的输出,我发现了以下命令:

<psql invoke> | tr -cd [:print:]

愉快地在本地(Ubuntu)测试它,我已经提交了更改,但管道失败了。经过几次尝试添加调试输出后,我登录到docker:latest图像(基于 Alpine)发现,trAlpine 上不支持[:print:].

我有一堆调用 coreutils 的脚本,现在它们都可能与 Alpine 不兼容。如何找出 Alpine 的 coreutils 与 Ubuntu 等普通 Linux 的 coreutils 之间存在哪些不兼容性?需要进行哪些调整才能使 shell 脚本在两者上运行?

答案1

Ubuntu 使用 GNU coreutils。 Alpine 使用 busybox。 Busybox 强调提供微小的可执行文件,因此往往比 GNU 实用程序更加精简。确定哪些内容可以在 Alpine 上运行的最可靠方法是阅读 busybox 项目的手册页或其他文档,和/或使用 busybox 本身进行安装和测试。在您通常键入 的地方trbusybox tr改为使用 并查看结果是否符合预期。

注意busybox支持 POSIX 风格的字符类([:upper:]和朋友),但根据来源[:print:]并且[:graph:]是“TODO”。仅支持以下类:alphaalnumdigitlowerupperspaceblankpunctcntrlxdigit。请注意,链接源顶部的版权日期是 1997 年。这是我找到的第一个副本;从那时起可能有更新。

相关内容