Почему ls
заключает некоторые имена файлов в одинарные кавычки
Здесь на самом деле происходит то, что ls
заключает в одинарные кавычки имена файлов с пробелами в них, с тем чтобы имена файлов можно было немедленно скопировать в другую команду или сценарий (то есть не нарушая их):
Это была очень непопулярная функция, введенная в версию 8.25 пакета coreutils
в начале 2016 года, по согласованию с тремя разработчиками.
Аргументы, приведенные критиками изменения, заключаются в том, что вывод ls
выглядит значительно более неприглядным, излишне расходится с почти полувековой традицией Unix и из-за того, как он был реализован (отказ от участия). совместимость с давно существующими скриптами и утилитами.
Поскольку эта функция была введена в пакет coreutils
- от которого зависит практически каждый дистрибутив Linux и в состав которого входит ls
- это изменение затрагивает все мыслимые системы Linux или Linux-подобные, от Arch Linux до Cygwin.
В случае с Debian и дистрибутивами, производными от Debian, такими как Ubuntu, изменение в какой-то момент было отменено после значительного протеста, а затем вновь восстановлено в октябре 2017 года.
Как ясно из этого ответа, лучший способ зарегистрировать свое разочарование в связи с этим изменением - связаться с разработчиками coreutils
напрямую через отчет об ошибках и (вежливо) сделать аргумент, что они допустили огромную ошибку. Согласно принципам открытого исходного кода, критическая масса пользователей, уважительно, но непреклонно настаивающих на том, чтобы ls
к поведению была восстановлена должным образом, теоретически должна быть достаточной, чтобы убедить разработчиков coreutils
прислушиваться к сообществу Linux.
В более кратком, прагматическом смысле, есть несколько способов, которыми вы можете восстановить поведение ls
до версии 8.25, оставив все выходные данные нетронутыми. Ниже приведены три способа сделать это для оболочки bash
.
Восстановление поведения ls
до версии 8.25
Установите переменную окружения QUOTING_STYLE
на literal
в файле ~/.bashrc
Найдите файл ~/.bashrc
в папке HOME (/home/yourusername
) и добавьте в него следующую строку:
export QUOTING_STYLE=literal
Сохраните файл, и изменения должны немедленно применяться ко всем новым терминалам bash
которые вы открываете.
Вы также можете запустить source ~/.bashrc
чтобы изменения были перенесены в любые окна терминала, которые были открыты во время внесения изменений.
Создать псевдоним для ls -N
Если вы предпочитаете псевдонимы переменным окружения, вы также можете создать псевдоним в .bashrc
который использует новый ключ -N
8.25. Из ls --help
:
-N, --literal печатать имена записей без кавычек
Для этого добавьте следующую строку в файл ~/.bashrc
и сохраните ее:
alias ls="ls -N"
Запустите source ~/.bashrc
чтобы новое изменение было передано на все открытые терминалы.
Используйте ключ командной строки -N
(только для текущего запуска)
Если вы предпочитаете новое поведение по умолчанию для coreutils
но хотите временно его обойти, вы также можете использовать ключ -N
непосредственно в команде:
ls -N