ls容器内的排序顺序

时间:2019-02-10 14:26:31

标签: linux bash docker ls

运行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

1 个答案:

答案 0 :(得分:1)

我发现使用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语言环境解决了我的问题,并再次按预期进行了排序。