Coreutils
找出 Alpine 和“普通”Linux(例如 Ubuntu)之間的 coreutils 不兼容性
我已經與非工作的 gitlab 建構作鬥爭。
我需要通過刪除一些非列印文件來清理 psql 的輸出,我發現了命令:
<psql invoke> | tr -cd [:print:]
愉快地在本地(Ubuntu)測試它我已經送出了更改,但管道失敗了。經過幾次嘗試添加調試輸出後,我登錄到
docker:latest
圖像(基於 Alpine)發現,tr
Alpine 上不支持[:print:]
.我有一堆呼叫 coreutils 的腳本,現在它們都可能與 Alpine 不兼容。如何找出 Alpine 的 coreutils 與 Ubuntu 等普通 Linux 之間存在哪些不兼容?需要進行哪些調整才能使 shell 腳本在它們兩者上執行?
Ubuntu 使用 GNU coreutils。高山使用busybox。Busybox 強調提供微小的執行檔,因此往往比 GNU 實用程序更加精簡。確定在 Alpine 上工作的最可靠方法是閱讀busybox 項目中的聯機幫助頁或其他文件,和/或使用busybox 本身進行安裝和測試。在您通常鍵入的地方
tr
,busybox tr
改為使用並查看結果是否符合預期。請注意,busybox確實支持 POSIX 樣式的字元類(
[:upper:]
和朋友),但根據來源,[:print:]
並且[:graph:]
是“TODO”。僅支持以下類:alpha
,alnum
,digit
,lower
,upper
,space
,blank
,punct
,cntrl
, 和xdigit
. 請注意,連結源頂部的版權日期是 1997 年。這是我找到的第一個副本;從那時起可能有更新。