Entiendo y acepto la premisa de que las secuencias de comandos defensivas de 1 shell son prudentes y, a largo plazo, más sostenibles.
Muchas de las respuestas a las preguntas de procesamiento de texto aquí siguen este principio incorporando las contingencias de respuestas para nombres de archivos poco ortodoxos; que puede contener espacios, guiones y nuevas líneas.
¿Qué tan frecuentes son las nuevas líneas en los nombres de archivo? Específicamente:
- ¿Alguna aplicación crea nombres de archivo que incluyan nuevas líneas por defecto?
- ¿Hay alguna situación en la que sería deseable crear dichos nombres de archivo?
- ¿O son predominantemente una instancia de error del usuario?
[1] Significado planificación y gestión de la gama más amplia posible de escenarios y contingencias ...
Pregunta inspirada por el comentario (bastante quejumbroso) sobre esta pregunta .
shell-script
filenames
newlines
jasonwryan
fuente
fuente
Respuestas:
Nunca he visto un nombre de archivo con una nueva línea distinta a las creadas deliberadamente para probar aplicaciones que manipulan nombres de archivos. Los nombres de archivo que contienen líneas nuevas pueden aparecer porque:
POSIX define un nombre de archivo como "un nombre que consta de 1 a {NAME_MAX} bytes utilizados para nombrar un archivo. Los caracteres que componen el nombre pueden seleccionarse del conjunto de todos los valores de caracteres, excluyendo el carácter de barra diagonal y el byte nulo. Los nombres de archivo DOT y punto-punto tiene un significado especial.”No hay garantía de que cada sistema de archivos aceptará‘nombres de archivos extraños’(el único garantizados caracteres son letras ASCII, dígitos, punto, guión y guión bajo , es decir
A-Z
,a-z
,0-9
y._-
, con guión prohibido en la primera posición), pero la mayoría de los sistemas de archivos nativos en unidades modernas sí.fuente
spaces
en los nombres de archivo no se garantiza que sean portátiles? Sería útil si aclaras que esos últimos tres caracteres sonperiod, underscore, and hyphen
. Con el enlace subrayado, es difícil saberlo.,
(utilizados por RCS),:
(utilizados por X.org),~
(utilizados por muchos programas en archivos de copia de seguridad) ... Pero son compatibles con casi todos los sistemas modernos.Cuando escribo un artículo, a menudo recopilo una bibliografía de archivos PDF de varias fuentes. No todos estos contienen los metadatos correctos, lo que significa que a veces copio y pego el título del documento desde el visor de PDF al nombre del archivo. Esto a menudo da como resultado nuevas líneas dentro del nombre del archivo, pero nunca ha sido un problema con las herramientas que he usado.
En mi humilde opinión, no hay nada "defensivo" en la codificación de un estándar ... un estándar que establece que se permiten nuevas líneas en los nombres de archivo. Si su script no maneja todos los nombres de archivo permitidos en el estándar, entonces su script está roto.
fuente
Nunca he visto a usuarios NORMALES usar nuevas líneas en los nombres de archivo. Parece que su propósito principal es (1) facilitar a los atacantes subvertir su sistema y (2) dificultar la escritura de programas seguros :-(. Sin embargo, los gustos modernos de Unix (como Linux) les permiten , por lo que debe prepararse para ellos si desea un programa que resista el ataque.
"Nombres de archivos y rutas en Shell: cómo hacerlo correctamente" muestra cómo manejar esto correctamente.
fuente