Alpineと「一般」Linux(Ubuntuなど)の間のcoreutilsの非互換性を見つける

Alpineと「一般」Linux(Ubuntuなど)の間のcoreutilsの非互換性を見つける

うまくいかないgitlabビルドのために苦労していました。

印刷できないコンテンツを削除してpsqlの出力をクリーンアップする必要がありましたが、次のコマンドが見つかりました。

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

ローカル(Ubuntu)でテストしましたが、変更をコミットしましたがパイプラインが失敗しました。デバッグ出力を追加しようとした後、(Alpineベース)画像にログインdocker:latestしました。tr[:print:]

coreutils を呼び出すスクリプトが複数あり、すべて Alpine と互換性がない可能性があります。 AlpineのcoreutilとUbuntuのような一般的なLinuxのcoreutilの間にどのような非互換性があるかを確認する方法は?両方でシェルスクリプトを実行するにはどのような調整が必要ですか?

答え1

UbuntuはGNU coreutilsを使用しています。アルパインはビジーボックスを使用しています。 Busyboxは小さな実行可能ファイルの提供を強調するので、GNUユーティリティよりも効率的な傾向があります。 Alpineで何が実行されるかを決定する最も確実な方法は、busyboxプロジェクトのマニュアルページやその他の文書を読んだり、busybox自体を使用してインストールしてテストすることです。一般的に入力する場合は、代わりに使用してtr結果busybox trが期待したものと同じであることを確認してください。

ビジーボックスに注意してくださいするPOSIXスタイルの文字クラス([:upper:]および友達)をサポートしますが、源泉[:print:]そして[:graph:]「TODO」です。次のクラスのみがサポートされています:alpha、、、、、、、、、、および。リンクされたソースの上部の著作権の日付は1997年です。これは私が見つけた最初のコピーです。それ以来、アップデートがあったでしょう。alnumdigitlowerupperspaceblankpunctcntrlxdigit

関連情報