経緯
- mac上で書いたコードを
alpine linuxベースのdocker containerで動かそうとした時に動かなくて困った。
原因
-
alpine linuxには標準のシェルashでは、nlコマンドが入っていなかった。 -
ashはbashとは違う軽量シェルというのは理解していたが、POSIXにも書いてあるnlぐらい入っているだろ・・・と思って書いてたら入っていなくて焦った。cat -nで代用しようと思ったら、ashで動くcatにはオプションがなくて使えなかった。
解決方法
-
apk add coreutilsを実行する。 -
apkはalpine linuxのパッケージ管理ツール -
apk addでパッケージを追加する -
coreutilsはgnu coreutilsのpackage -
nl単体でinstallとかどうやってやるんだろ・・・とか悩んでいたら、同僚にcoreutil辺りに入ってるんじゃない?と言われ、パッケージ検索したら発見。すごい感謝です・・・
さいごに
- シェルは結構実行環境依存があるので、ちゃんと実行環境を揃えましょう。
- これでも動かなかったら、ちゃんと
bashが入っているイメージを使ったほうが良い。