Я только что заметил, что на одном из моих компьютеров (на котором запущен Debian Sid) всякий раз, когда я ls
набираю имя файла с пробелами, его заключают в одинарные кавычки.
Я немедленно проверил свои псевдонимы, чтобы найти их нетронутыми.
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt
wyatt@debian630:~/testdir$ alias
alias ls='ls --color=auto'
alias wget='wget --content-disposition'
wyatt@debian630:~/testdir$
Другой тест, с файлами, содержащими одинарные кавычки в своих именах (также отвечая на запрос jimmij):
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt 'thishasasinglequotehere'\''.txt'
wyatt@debian630:~/testdir$ touch "'test 1.txt'"
wyatt@debian630:~/testdir$ ls
''\''test 1.txt'\''' test1.txt
'test 1.txt' 'thishasasinglequotehere'\''.txt'
обновление с новым выходом coreutils-8.26 (который, по общему признанию, гораздо менее запутан, но по-прежнему раздражает иметь по умолчанию). Спасибо Pádraig Brady за эту распечатку:
$ ls
"'test 1.txt'" test1.txt
'test 1.txt' "thishasasinglequotehere'.txt"
$ ls -N
'test 1.txt' test1.txt
test 1.txt thishasasinglequotehere'.txt
Почему это происходит? Как мне остановить это правильно?
чтобы уточнить, я сам установил ls для автоматического вывода цвета. Это никогда не помещало кавычки вокруг вещей прежде.
Я бегу bash
и coreutils 8.25.
РЕДАКТИРОВАТЬ: Похоже, разработчики coreutils думали (ссылка), что было бы хорошей идеей сделать это глобальным дефолтом, несмотря на нарушение принципа наименьшего удивления, а также более чем 46-летней традиции UNIX.
Любой способ исправить это без перекомпиляции?
ОБНОВЛЕНИЕ - октябрь 2017 г. - Debian Sid по умолчанию снова включил экранирование оболочки. Это просто смешно. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582
И в нижней части цепочки ответов на предыдущий отчет об ошибках «изменение было преднамеренным и останется». https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226
Я думал, что это было решено. Очевидно нет.
ОБНОВЛЕНИЕ: апрель 2019 г .: только что обнаружен внушительный отчет об ошибках в PHP, вызванный этим изменением ls
. Когда вы сбиваете с толку разработчиков и генерируете ложные сообщения об ошибках, пришло время переосмыслить ваши изменения.
Обновление: Android toybox ls
теперь делает нечто похожее на это, но с обратными слешами вместо кавычек. При использовании опции -q пробелы отображаются как «символы вопросительного знака» (я не проверял, какие они есть, поскольку они, очевидно, не пробелы), поэтому единственное исправление, которое я нашел до сих пор без рутирования рассматриваемого устройства, это добавить это в сценарий и источник его при запуске оболочки. Эта функция позволяет ls
использовать столбцы, если они находятся в терминале и, в противном случае, печатают по одной на строку, одновременно вводя ls
в заблуждение пространство печати, поскольку оно проходит через трубу.
ls() {
# only way I can stop ls from escaping with backslashes
if [ -t 1 ]; then
/system/bin/ls -C "$@" |cat
else
/system/bin/ls "$@" |cat
fi
}
ls
команду.ls | cat
и посмотрите, исчезнет ли это. Если бы у меня была машина времени, я бы вернулся к Bell Labs ~ 1970 и попытался бы убедить Кена Томпсона в том, что выделение места в именах файлов и каталогов - плохая идея. :-P'*'
. Я думаю, что я буду добавлятьls
псевдонимы ко всем моим машинам, чтобы избавиться от них ...QUOTING_STYLE=literal
а не псевдонима. (Я думаю, это дело вкуса, но я предпочитаю переменную.)Ответы:
Предисловие : Несмотря на то, что может быть весьма удовлетворительным объявить ответ, подобный этому, и назвать его днем, пожалуйста, будьте уверены, что разработчики GNU не заботятся о SO голосах за ответы, и что, если вы действительно хотите побудить их измениться , вам необходимо напишите им, как этот ответ описывает.
" Почему это происходит? "
Несколько разработчиков Coreutils решили, что они знают лучше, чем десятилетия стандартов де-факто.
" Как мне остановить это правильно? "
http://www.gnu.org/software/coreutils/coreutils.html :
Дистрибутивы , которые уже Откачены это изменение:Debian coreutils-8.25-2В том числе , следовательно, по- видимому, Ubuntu , и все из сотен Debian не на основе и Ubuntu на основе производныхДистрибутивы не затронуты:
" Любой способ исправить это без перекомпиляции? "
Сторонники бы вы ...
... во всех ваших инсталляциях, везде, до конца вечности.
источник
ls
то, что вы видите, больше не хранится. Эта функция должна быть необязательной, а не по умолчанию.Вы можете выбрать стиль цитирования :
Такой же как:
или же:
Сделать это псевдоним, или установить
export QUOTING_STYLE=literal
в вашем.bashrc
достичь заранее 8.25 поведения.источник
export QUOTING_STYLE=literal
в вашем bashrc.-N
, кажется. Я просто собираю свою собственную версию, так как у меня уже есть настроенный личный репозиторий.literal
вместо негоescape
(я считаю, что @cuonglm просто хотел показать, как изменить стиль, не ориентируясь конкретно наescape
стиль).Несколько моментов об изменении.
источник
ls
сломлен? Посмотрите на все эти аргументы против вашей перемены. Никто не хочет этого. Возможно, пришло время извиниться перед миром и отменить его.