Právě jsem si všiml, že na jednom z mých počítačů (se systémem Debian Sid), kdykoli napíšu ls
jakýkoli název souboru s mezerami má jednoduché uvozovky.
Okamžitě jsem zkontroloval své aliasy, ale našel jsem je neporušené.
[email protected]:~/testdir$ ls
'test 1.txt' test1.txt
[email protected]:~/testdir$ alias
alias ls='ls --color=auto'
alias wget='wget --content-disposition'
[email protected]:~/testdir$
(obrázek)
Další test se soubory obsahujícími jednoduché uvozovky ve svých názvech (také odpovídá na žádost jimmije):
[email protected]:~/testdir$ ls
'test 1.txt' test1.txt 'thishasasinglequotehere'''.txt'
[email protected]:~/testdir$ touch "'test 1.txt'"
[email protected]:~/testdir$ ls
''''test 1.txt'''' test1.txt
'test 1.txt' 'thishasasinglequotehere'''.txt'
(obrázek)
aktualizace s novým výstupem coreutils-8.26 (což je jistě mnohem méně matoucí, ale stále znepokojivé mít ve výchozím nastavení). Děkuji Pádraigu Bradymu za tento výtisk:
$ ls
"'test 1.txt'" test1.txt
'test 1.txt' "thishasasinglequotehere'.txt"
$ ls -N
'test 1.txt' test1.txt
test 1.txt thishasasinglequotehere'.txt
Proč se tohle děje? Jak to správně zastavím?
pro upřesnění jsem sám nastavil ls na automatický barevný výstup. Nikdy předtím nedával věci do uvozovek.
Používám bash
a coreutils 8.25.
EDIT:
Zdá se, že vývojáři coreutils si mysleli (odkaz), že by bylo dobré z toho udělat globální výchozí nastavení navzdory porušení principu nejmenšího údivu a 46+ let tradice UNIXu.
Nějaký způsob, jak to opravit bez rekompilace?
AKTUALIZACE – říjen 2017 – Debian Sid ve výchozím nastavení znovu povolil citování shellu. Začíná to být směšné. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582
A na konci řetězce odpovědí na předchozí hlášení o chybě „změna byla záměrná a zůstane zachována“. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226
Myslel jsem, že je to vyřešeno. Zřejmě ne.
AKTUALIZACE:Duben 2019:Právě jsme našli falešnou zprávu o chybě v PHP, která byla způsobena touto změnou na ls
. Když mate vývojáře a generujete falešná hlášení o chybách, je čas přehodnotit změny.
Aktualizace:Android toybox ls
nyní dělá něco podobného, ale se zpětnými lomítky místo uvozovek. Použití volby -q způsobí, že se mezery vykreslí jako „znaky otazníku“ (nekontroloval jsem, co to je, protože to zjevně mezery nejsou), takže jedinou opravou, kterou jsem zatím našel bez rootování dotyčného zařízení, je přidat to do skriptu a zdroj při spouštění shellu. Tato funkce vytvoří ls
používejte sloupce, pokud je v terminálu, a jinak tiskněte jeden na řádek, zatímco oklamete ls
do tiskových prostor doslovně, protože prochází potrubím.
ls() {
# only way I can stop ls from escaping with backslashes
if [ -t 1 ]; then
/system/bin/ls -C [email protected] |cat
else
/system/bin/ls [email protected] |cat
fi
}
Přijatá odpověď:
Předmluva :I když může být docela uspokojivé hlasovat pro odpověď jako je tato a nazývat ji den, buďte si prosím jisti, že správci GNU coreutils se nestarají o hlasy SO odpovědí a že pokud skutečně chcete povzbudit je ke změně , musíte jim zaslat e-mail jak popisuje tato odpověď.
Aktualizace 2019 :
Někdy v minulém roce se správci zdvojnásobili a nyní nabízejí všem [e-mailem chráněným] hlášením o tomto problému pouze standardní odpověď poukazující na neuvěřitelně dlouhou stránku na jejich webu se seznamem problémů, které mají lidé s touto změnou že se zavázali ignorovat.
Neustálý tlak ze zpráv [chráněných e-mailem] měl zjevně účinek, vynutil si generování této ohromné a absurdní stránky a potenciálně snížil počet správců ochotných se problémem zabývat pouze na jednoho.
Když tolik lidí považuje věc za chybu, pak je to chyba, ať už s tím správci nesouhlasí, nebo ne.
Pokračujte v zasílání e-mailů zůstává nejjednodušším způsobem, jak podpořit změnu.
„Proč se to děje? “
Související:Nepřetržité čtení z pojmenované roury (cat nebo tail -f)?Několik správců coreutils se rozhodlo, že znají lépe než desetiletí de facto standardů.
„Jak to správně zastavím? “
http://www.gnu.org/software/coreutils/coreutils.html:
Hlášení chyb
Pokud si myslíte, že jste našli chybu v Coreutils, pošlete prosím co
kompletní hlášení o chybě na <[email protected]> a
bude automaticky vložen do nástroje pro sledování chyb Coreutils. Před
nahlášením chyb si prosím přečtěte FAQ. Velmi užitečným a často zmiňovaným
průvodcem, jak psát hlášení o chybách a klást dobré otázky, je
dokument How To Ask Questions The Smart Way . Můžete procházet předchozí
příspěvky a prohledávat archiv bug-coreutils.
Distribuce, které již byly vráceny zpět tato změna:
Debian coreutils-8.25-2Včetně pravděpodobně Ubuntu a všech stovek derivátů založených na Debianu a Ubuntu
Distribuce nedotčeny:
- openSUSE (již použité -N)
“Jakýkoli způsob, jak to opravit bez rekompilace? “
Zastánci by vás chtěli…
vraťte se ke starému formátu přidáním -N do jejich aliasu ls
…na všech vašich instalacích, všude, po zbytek věčnosti.