¿Por qué 'ls' repentinamente envuelve elementos con espacios en comillas simples?

Me acabo de dar count de que en una de mis máquinas (ejecutando Debian Sid) cada vez que ls cualquier nombre de file con espacios tiene comillas simples que lo rodean.

Inmediatamente revisé mis alias, solo para encontrarlos intactos.

 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$ 

(image)

Otra testing, con files que contienen comillas simples en sus nombres (también respondiendo a una request de 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' 

(image)

actualización con la nueva salida coreutils-8.26 (que es mucho less confusa, pero aún irritante de tener por defecto). Gracias a Pádraig Brady por esta printing:

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

¿Por qué está pasando esto? ¿Cómo lo detengo adecuadamente?

para aclarar, yo mismo configuré ls para que automáticamente coloree la salida. Nunca puso citas sobre cosas antes.

Estoy ejecutando bash y coreutils 8.25.

EDITAR: Parece que los desarrolladores coreutils pensaron (vincular) que sería una buena idea hacer de eso un incumplimiento global a pesar de romper el principio de less asombro así como más de 46 años de tradición de UNIX.

¿Alguna forma de arreglar esto sin una recompilation?

ACTUALIZACIÓN – Octubre de 2017 – Debian Sid ha vuelto a habilitar la cotización de escape de shell por defecto. Esto es simplemente ridículo. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582

Y en la parte inferior de la cadena de respuestas al informe de errores anterior, "el cambio fue intencional y se mantendrá". https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226

Pensé que esto estaba resuelto. Aparentemente no.

Dado que las otras respuestas aquí no responden a todas las preguntas formuladas …


" ¿Por qué está pasando esto? "

Varios desarrolladores coreutils decidieron que sabían mejor que décadas de estándares de facto.


" ¿Cómo lo detengo adecuadamente? "

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

Informes de errores

Si crees que has encontrado un error en Coreutils, envía un informe de error lo más completo posible a <bug-coreutils@gnu.org> , y se ingresará automáticamente en el rastreador de errores de Coreutils. Antes de reportar errores, lea las preguntas frecuentes. Una guía muy útil y a menudo referenceda sobre cómo escribir informes de errores y hacer buenas preguntas es el documento Cómo hacer preguntas de manera inteligente. Puede navegar publicaciones anteriores y search en el file de error-coreutils.

Distros que ya han revertido este cambio:

  • Debian coreutils-8.25-2
    • Incluyendo consecuentemente, supuestamente, Ubuntu y todos los cientos de derivados basados ​​en Debian y basados ​​en Ubuntu

Distros no afectado:

  • openSUSE (ya usado -N)

"¿ Hay alguna manera de arreglar esto sin una recompilation? "

Los proponentes lo tendrían …

regrese al formatting anterior agregando -N a su ls alias

… en todas sus instalaciones, en todas partes, por el rest de la eternidad.

Puede elegir el estilo de cotización :

 ls --quoting-style=literal 

Lo mismo que:

 ls -N 

o:

 QUOTING_STYLE=literal ls 

export QUOTING_STYLE=literal en un alias o establezca export QUOTING_STYLE=literal en su .bashrc para lograr un comportamiento anterior a 8.25.

Algunos puntos sobre el cambio.

  • Se introdujo en coreutils v8.25, y la alignment mejoró en v8.26
  • Solo ocurre cuando la salida a terminales no rompe los scripts
  • Desambigua la salida para los usuarios de los files que contienen espacios en blanco
  • Sanitiza la salida para que sea seguro copyr y pegar
  • La salida ahora es siempre válida para copyr y pegar nuevamente al shell
  • Los usuarios pueden volver al formatting anterior al agregar -N a su alias ls

Como solución alternativa, puede replacela por una versión anterior:

 wget http://ftp.gnu.org/gnu/coreutils/coreutils-7.5.tar.gz tar -xzvf coreutils-7.5.tar.gz cd coreutils-7.5/ export CFLAGS="-static -O2 -g" chmod +x configure ./configure cd /src make ls mv ls `which ls` 

Fijo.