GNU/Linux >> Tutoriales Linux >  >> Debian

Debian:¿por qué 'ls' de repente envuelve elementos con espacios entre comillas simples?

Me acabo de dar cuenta de que en una de mis máquinas (ejecutando Debian Sid) cada vez que escribo ls cualquier nombre de archivo con espacios tiene comillas simples a su alrededor.

Inmediatamente revisé mis alias, solo para encontrarlos intactos.

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

(imagen)

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

(imagen)

actualice con la nueva salida coreutils-8.26 (que ciertamente es mucho menos confuso, pero aún irritante de tener por defecto). Gracias a Pádraig Brady por esta impresión:

$ 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 correctamente?

para aclarar, yo mismo configuré ls para que coloree automáticamente la salida. Nunca antes puso comillas alrededor de las cosas.

Estoy ejecutando bash y coreutils 8.25.

EDITAR:
Parece que los desarrolladores de coreutils pensaron (enlace) que sería una buena idea convertirlo en un valor predeterminado global a pesar de romper el principio de menor asombro y más de 46 años de tradición UNIX.

¿Alguna forma de arreglar esto sin una recompilación?

ACTUALIZACIÓN:octubre de 2017:Debian Sid ha vuelto a habilitar las comillas de escape de shell de forma predeterminada. Esto se está volviendo ridículo. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582

Y al final de la cadena de respuesta al informe de error anterior, "el cambio fue intencional y permanecerá". https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226

Pensé que esto estaba resuelto. Aparentemente no.

ACTUALIZACIÓN:abril de 2019:Acabo de encontrar un informe de error falso en PHP causado por este cambio en ls . Cuando confunde a los desarrolladores y genera informes de errores falsos, es hora de repensar sus cambios.

Actualización:Android toybox ls ahora está haciendo algo similar a esto pero con barras invertidas en lugar de comillas. El uso de la opción -q hace que los espacios se representen como 'caracteres de signo de interrogación' (no he verificado qué son, ya que obviamente no son espacios), por lo que la única solución que he encontrado hasta ahora sin rootear el dispositivo en cuestión es agregar esto a un script y obtenerlo al iniciar un shell. Esta función hace que ls use columnas si está en una terminal y, de lo contrario, imprima una por línea, mientras engaña a ls en espacios de impresión textualmente porque está corriendo a través de una tubería.

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
}

Respuesta aceptada:

Prefacio :Si bien puede ser bastante satisfactorio votar a favor de una respuesta como esta y dar por terminada, tenga la seguridad de que a los mantenedores de GNU coreutils no les importan los votos de respuesta SO, y que si realmente quiere para animarlos a cambiar , debe enviarles un correo electrónico como describe esta respuesta.

Actualización 2019 :
En algún momento del año pasado, los mantenedores se duplicaron y ahora ofrecen a cualquier [email protected] informes sobre este problema solo una respuesta repetitiva que apunta a una página increíblemente larga en su sitio web que enumera los problemas que la gente tiene con este cambio. que se han comprometido a ignorar.
La presión incesante de los informes [protegidos por correo electrónico] claramente ha tenido un efecto, forzando la generación de esta página inmensa y absurda, y reduciendo potencialmente la cantidad de mantenedores dispuestos a lidiar con el problema a solo uno.
Cuando tantas personas consideran que algo es un error, entonces es un error, ya sea que los mantenedores estén en desacuerdo o no.
Continuar enviándoles correos electrónicos sigue siendo la forma más sencilla de fomentar el cambio.

¿Por qué sucede esto?

Relacionado:¿Lectura continua de la tubería con nombre (gato o cola -f)?

Varios mantenedores de coreutils decidieron que sabían más que décadas de estándares de facto.

¿Cómo lo detengo correctamente?

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

Informes de errores

Si cree que ha encontrado un error en Coreutils, envíe un informe de error tan
completo como sea posible a <[email protected]> , y
se ingresará automáticamente en el rastreador de errores de Coreutils. Antes de
informar errores, lea las preguntas frecuentes. Una guía muy útil y a la que se hace referencia a menudo
sobre cómo escribir informes de errores y hacer buenas preguntas es el documento
Cómo hacer preguntas de manera inteligente . Puede buscar publicaciones
anteriores y buscar en el archivo bug-coreutils.

Distribuciones que ya han revertido este cambio:

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

Distribuciones no afectadas:

  • openSUSE (ya usado -N)

¿Alguna forma de arreglar esto sin volver a compilar?

Los defensores querrían que…

volver al formato anterior agregando -N a su alias ls

…en todas tus instalaciones, en todas partes, por el resto de la eternidad.


Debian
  1. Cómo hacer una copia de seguridad de las bases de datos MySQL con mylvmbackup en Debian Squeeze

  2. ¿Por qué se muestra una sola barra invertida cuando se usan comillas?

  3. ¿Cómo reemplazo las comillas simples con otro carácter en sed?

  4. Problemas con la variable bash que se expande con comillas simples

  5. sed reemplaza todas las pestañas y espacios con un solo espacio

Hacer chroot de Apache 2.4 con mod_unixd en Debian 8 (Jessie)

Instale WordPress 5 con Apache en Debian 9

Cómo instalar Debian 11 (Bullseye) con capturas de pantalla

Configuración inicial del servidor con Debian 11

Cómo configurar LAMP con Debian 11

Cómo configurar el servidor Samba con Debian 11