GNU/Linux >> Znalost Linux >  >> Debian

Debian – Proč ‚ls‘ najednou obaluje položky mezerami do jednoduchých uvozovek?

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-2
    • Vč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.


Debian
  1. Zabezpečte Debian pomocí antiviru ClamAV

  2. Proč se při použití uvozovek zobrazuje jedno zpětné lomítko?

  3. Jak nahradím jednoduché uvozovky jiným znakem v sed?

  1. Jak zálohovat databáze MySQL pomocí mylvmbackup na Debian Squeeze

  2. příkaz bash alias s jednoduchými i dvojitými uvozovkami

  3. sed nahradit všechny tabulátory a mezery jednou mezerou

  1. Jak nastavit firewall s UFW na Debianu 10

  2. Jak nastavit firewall s UFW na Debianu 9

  3. Problémy s rozšiřováním proměnné bash pomocí jednoduchých uvozovek