Coreutils

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

  • October 4, 2017

我已經與非工作的 gitlab 建構作鬥爭。

我需要通過刪除一些非列印文件來清理 psql 的輸出,我發現了命令:

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

愉快地在本地(Ubuntu)測試它我已經送出了更改,但管道失敗了。經過幾次嘗試添加調試輸出後,我登錄到docker:latest圖像(基於 Alpine)發現,trAlpine 上不支持[:print:].

我有一堆呼叫 coreutils 的腳本,現在它們都可能與 Alpine 不兼容。如何找出 Alpine 的 coreutils 與 Ubuntu 等普通 Linux 之間存在哪些不兼容?需要進行哪些調整才能使 shell 腳本在它們兩者上執行?

Ubuntu 使用 GNU coreutils。高山使用busybox。Busybox 強調提供微小的執行檔,因此往往比 GNU 實用程序更加精簡。確定在 Alpine 上工作的最可靠方法是閱讀busybox 項目中的聯機幫助頁或其他文件,和/或使用busybox 本身進行安裝和測試。在您通常鍵入的地方trbusybox tr改為使用並查看結果是否符合預期。

請注意,busybox確實支持 POSIX 樣式的字元類([:upper:]和朋友),但根據來源[:print:]並且[:graph:]是“TODO”。僅支持以下類:alpha, alnum, digit, lower, upper, space, blank, punct, cntrl, 和xdigit. 請注意,連結源頂部的版權日期是 1997 年。這是我找到的第一個副本;從那時起可能有更新。

引用自:https://unix.stackexchange.com/questions/396043