порядок сортировки внутри контейнера - PullRequest
0 голосов
/ 10 февраля 2019

Запуск ls -d для вывода списка каталогов, печати каталогов в другом порядке, если в имени файла присутствует конечный символ /.Это почему?Какие правила сортировки применяются?и почему это происходит только с докером?

с трейлингом /

$ 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 голосов
/ 11 февраля 2019

Я узнал, что получаю то же поведение, используя команду 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"

Спасибо Дэвиду за указание на меняв правильном направлении это вызвано настройками локали, как описано здесь

В пустом контейнере Ubuntu используется локаль POSIX, в которой правила сортировки отличаются от правил en_US.Я решил свою проблему, установив локаль en_US в образ докера, и сортировка снова работает, как и ожидалось.

...