一个 echo -e 引发的问题

背景

因#%@&&¥@的原因,服务主机要移到 arm 下,需要重新构建镜像来验证功能,原来在 amd 下四肢健全的 Dockerfile 居然瘸了 😒

排查

Dockerfile 里有一步需要添加公钥,用到了echo -e命令,哎~问题来了,它居然把 -e 输出出来了
再发现 bash 可以 sh 不可以

原因

这个说来话长,咱们长话短说
shell 有很多种,不同的 shell 支持的语法不同,dash 比 bash 更小更快,所以 Ubuntu 6.10 开始默认的 sh 都是 Dash Shell,dash 不支持 echo -e, over ~

详见 👉🏻 linux 中的 sh、dash、bash 的区别

解决

Dockerfile 里加上 shell 切换

# 切换bash
RUN ln -sfn /bin/bash /bin/sh
目录