2

Я заметил, что когда я выполняю ls в терминале, некоторые имена файлов заключаются в одинарные кавычки, а некоторые нет.

Мне не нравится, как это выглядит, так как я предпочитаю, чтобы мои выходные выводы были красивыми и однородными. Чем обусловлен этот функционал и можно ли его безопасно отключить?

1 ответ1

4

Почему 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .