ls 在容器内排序

ls sort order inside container

运行 ls -d 列出目录,如果文件名中存在尾随 /,则以不同的顺序打印目录。这是为什么?什么排序规则适用?为什么这种情况只发生在 docker?

有尾随 /

$ docker run --rm ubuntu:16.04 /bin/bash -c "mkdir foo ; mkdir foo-bar ; ls -d foo/ foo-bar/"

foo-bar/
foo/

没有尾随/

$ docker run --rm -it ubuntu:16.04 /bin/bash -c "mkdir foo ; mkdir foo-bar ; ls -d foo foo-bar"

foo
foo-bar

我发现我使用 sort 命令得到了相同的行为

docker run --rm ubuntu:16.04 /bin/bash -c "echo -e 'foo/\nfoo-bar/' | sort"

但使用 sort -d

时排序顺序发生变化
docker run --rm ubuntu:16.04 /bin/bash -c "echo -e 'foo/\nfoo-bar/' | sort -d"

感谢 David 为我指明了正确的方向,这是由here

所述的语言环境设置引起的

在裸机 ubuntu 容器上,使用 POSIX 语言环境,其排序规则与 en_US 不同。 我通过在 docker 图像中安装 en_US 区域设置解决了我的问题,并且排序再次按预期工作。