GNU/Linux >> Linux Esercitazione >  >> Debian

Debian:perché "ls" avvolge improvvisamente gli elementi con spazi tra virgolette singole?

L'ho appena notato su una delle mie macchine (che esegue Debian Sid) ogni volta che scrivo ls qualsiasi nome di file con spazi è racchiuso tra virgolette singole.

Ho immediatamente controllato i miei alias, solo per trovarli intatti.

[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$

(immagine)

Un altro test, con file contenenti virgolette singole nei loro nomi (rispondendo anche a una richiesta di jimmij):

[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'

(immagine)

aggiornamento con il nuovo output di coreutils-8.26 (che è certamente molto meno confuso, ma comunque irritante da avere per impostazione predefinita). Grazie a Pádraig Brady per questa stampa:

$ ls
"'test 1.txt'"   test1.txt
'test 1.txt'    "thishasasinglequotehere'.txt"

$ ls -N
'test 1.txt'  test1.txt
test 1.txt    thishasasinglequotehere'.txt

Perché sta succedendo? Come faccio a fermarlo correttamente?

per chiarire, io stesso ho impostato ls per colorare automaticamente l'output. Non ha mai messo virgolette sulle cose prima.

Sto eseguendo bash e coreutils 8.25.

EDIT:
Sembra che gli sviluppatori di coreutils abbiano pensato (link) che sarebbe una buona idea renderlo un default globale nonostante la violazione del principio del minimo stupore e oltre 46 anni di tradizione UNIX.

Un modo per risolvere questo problema senza una ricompilazione?

AGGIORNAMENTO – ottobre 2017 – Debian Sid ha riattivato la citazione di escape della shell per impostazione predefinita. Questo sta diventando ridicolo. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582

E in fondo alla catena di risposta alla precedente segnalazione di bug, "la modifica era intenzionale e rimarrà". https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226

Ho pensato che questo fosse risolto. A quanto pare no.

AGGIORNAMENTO:aprile 2019:ho appena trovato una segnalazione di bug spuria in PHP causata da questa modifica a ls . Quando stai confondendo gli sviluppatori e generando false segnalazioni di bug, è tempo di ripensare alle tue modifiche.

Aggiornamento:scatola dei giochi Android ls ora sta facendo qualcosa di simile a questo ma con barre inverse anziché virgolette. L'uso dell'opzione -q rende gli spazi visualizzati come "caratteri punto interrogativo" (non ho verificato quali sono, poiché ovviamente non sono spazi), quindi l'unica soluzione che ho trovato finora senza eseguire il root del dispositivo in questione è aggiungere questo in uno script e procurarselo all'avvio di una shell. Questa funzione crea ls usa le colonne se in un terminale e altrimenti stampa una per riga, ingannando ls negli spazi di stampa testualmente perché scorre attraverso una pipe.

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
}

Risposta accettata:

Prefazione :Anche se può essere abbastanza soddisfacente votare una risposta come questa e farla finita, ti assicuriamo che i manutentori di GNU coreutils non si preoccupano dei voti delle risposte SO e che se lo desideri davvero per incoraggiarli a cambiare , devi inviargli un'email come descrive questa risposta.

Aggiornamento 2019 :
Qualche volta lo scorso anno i manutentori sono raddoppiati e ora offrono a qualsiasi segnalazione [protetta tramite posta elettronica] su questo problema solo una risposta standard che indica una pagina incredibilmente lunga sul loro sito Web che elenca i problemi che le persone hanno con questa modifica che si sono impegnati a ignorare.
La pressione incessante dei rapporti [protetti tramite posta elettronica] ha chiaramente avuto un effetto, costringendo la generazione di questa pagina immensa e assurda e riducendo potenzialmente a uno solo il numero di manutentori disposti ad affrontare il problema.
Quando così tante persone considerano una cosa un bug, allora è un bug indipendentemente dal fatto che i manutentori siano in disaccordo o meno.
Continuando a inviarli via email rimane il modo più semplice per incoraggiare il cambiamento.

"Perché sta accadendo?

Correlati:lettura continua da named pipe (cat o tail -f)?

Diversi manutentori di coreutils hanno deciso di conoscere meglio di decenni di standard de facto.

"Come faccio a interromperlo correttamente?

http://www.gnu.org/software/coreutils/coreutils.html:

Segnalazioni di bug

Se ritieni di aver trovato un bug in Coreutils, invia il più
completo di segnalazione di bug possibile a <[email protected]> e
verrà inserito automaticamente nel bug tracker di Coreutils. Prima di
segnalare bug, leggi le FAQ. Una guida molto utile e spesso citata
su come scrivere segnalazioni di bug e porre buone domande è il documento
How To Ask Questions The Smart Way . Puoi sfogliare i post
precedenti e cercare nell'archivio bug-coreutils.

Distribuzioni che sono già ripristinate questa modifica:

  • Debian coreutils-8.25-2
    • Compreso di conseguenza, presumibilmente, Ubuntu e tutte le centinaia di derivati ​​basati su Debian e Ubuntu

Distribuzioni inalterate:

  • openSUSE (già usato -N)

"Un modo per risolvere questo problema senza una ricompilazione?

I fautori ti vorrebbero...

torna al vecchio formato aggiungendo -N al loro alias ls

...su tutte le tue installazioni, ovunque, per il resto dell'eternità.


Debian
  1. Come eseguire il backup dei database MySQL con mylvmbackup su Debian Squeeze

  2. Proteggi Debian con ClamAV Antivirus

  3. Perché viene mostrata una singola barra rovesciata quando si utilizzano le virgolette?

  4. Come posso sostituire le virgolette singole con un altro carattere in sed?

  5. comando bash alias con virgolette singole e doppie

Chroot di Apache 2.4 con mod_unixd su Debian 8 (Jessie)

Installa WordPress 5 con Apache su Debian 9

Come installare Debian 11 (Bullseye) con schermate

Configurazione iniziale del server con Debian 11

Come configurare LAMP con Debian 11

Come configurare Samba Server con Debian 11