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 区域设置解决了我的问题,并且排序再次按预期工作。
运行 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 区域设置解决了我的问题,并且排序再次按预期工作。