GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué *no* analizar `ls` (y qué hacer en su lugar)?

Constantemente veo respuestas que citan este enlace que dice definitivamente “No analizar ls !” Esto me molesta por un par de razones:

  1. Parece que la información en ese enlace ha sido aceptada al por mayor con pocas dudas, aunque puedo detectar al menos algunos errores en la lectura casual.

  2. También parece que los problemas mencionados en ese enlace no han despertado el deseo de encontrar una solución.

Desde el primer párrafo:

…cuando preguntas [ls] para una lista
de archivos, hay un gran problema:Unix permite casi cualquier carácter en
un nombre de archivo, incluidos espacios en blanco, saltos de línea, comas, símbolos de tubería y
prácticamente cualquier otra cosa que desee alguna vez intente usar como delimitador excepto
NUL. … ls separa los nombres de archivo con saltos de línea. Esto está bien
hasta que tenga un archivo con una nueva línea en su nombre. Y como no
conozco ninguna implementación de ls que le permite terminar
nombres de archivo con caracteres NUL en lugar de saltos de línea, esto nos deja
incapaces de obtener una lista de nombres de archivo de forma segura con ls .

Qué fastidio, ¿verdad? Cómo siempre ¿podemos manejar un conjunto de datos enumerados terminados en líneas nuevas para datos que puedan contener líneas nuevas? Bueno, si las personas que responden preguntas en este sitio web no hicieran este tipo de cosas a diario, podría pensar que estamos en problemas.

Sin embargo, la verdad es que la mayoría de los ls Las implementaciones en realidad proporcionan una API muy simple para analizar su salida y todos lo hemos estado haciendo todo el tiempo sin siquiera darnos cuenta. No solo puede terminar un nombre de archivo con nulo, sino que también puede comenzar uno con nulo o con cualquier otra cadena arbitraria que desee. Además, puede asignar estas cadenas arbitrarias por tipo de archivo . Por favor considere:

LS_COLORS='lc=
Linux
  1. ¿Qué es un servidor Linux y por qué su negocio necesita uno?

  2. Hashing de contraseñas y por qué lo necesitamos

  3. Cómo:¿Qué es Git y Github? ¿Cómo lo uso y por qué debería importarme?

  4. ¿Qué mató mi proceso y por qué?

  5. ¿Qué es una GPU Matrox y por qué el servidor UNIX de mi universidad tiene una?

¿Qué es chroot jail y cómo usarlo?

¿Qué es una máquina virtual y por qué usarla?

¿Qué son los contenedores multicuenta de Firefox? ¿Por qué y cómo usarlo?

¿Qué es el comando Grep en Linux? ¿Por qué se usa y cómo funciona?

¿Qué es un Homelab y por qué debería tener uno?

¿Qué es la función de la comunidad ONLYOFFICE y por qué debería usarla?