Почему ls
некоторые имена файлов заключаются в одинарные кавычки?
Здесь на самом деле происходит то, что ls
одинарные кавычки заключаются в имена файлов с пробелами в них, с тем чтобы имена файлов можно было немедленно скопировать в другую команду или сценарий (т.е. без их разбиения):
Это была весьма непопулярна особенность введена в версии 8.25 от coreutils
пакета в начале 2016 года на основе консенсуса всего три разработчиков.
Аргументы, приведенные критиками изменения, заключаются в том, что это делает вывод ls
look значительно более неприглядным, излишне расходится с почти полувековой традицией 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