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