Bash Scripting: analizar el contenido del archivo en una matriz

Bash Scripting: analizar el contenido del archivo en una matriz

Saludos,

Estoy escribiendo un script bash simple que necesita analizar el contenido de un archivo en una matriz. Las entradas en el archivo están delimitadas por "nueva línea", por lo que el archivo se vería así:

path/to/file
path/to/other/file

Me gustaría analizar los contenidos e iterarlos. Mi código actualmente se parece a:

CONTENT=`cat /path/to/text/file.txt`
for PATH in $CONTENT
do
   echo $PATH
   chmod -R 440 $PATH
fi

Este código funciona muy bien con un archivo con finales de línea UNIX. Sin embargo, con un archivo de texto formateado en Windows, se ahoga miserablemente. La instrucción "echo $PATH" produce la ruta correcta, pero el chmod falla al decir que el archivo no existe. Mi habilidad es que los finales de línea de Windows no se recortan, por lo que intento modificar una ruta de archivo que incluya un carácter de nueva línea.

Necesito hacer que esto funcione independientemente de si el archivo de destino se creó con nuevas líneas de Unix o Windows, pero dado que soy algo nuevo en los scripts de shell, no estoy tan seguro de cómo hacerlo.

¡Aprecio tu ayuda!

Respuesta1

Parece que solo necesitas eliminar el retorno de carro al procesar cada línea. La manera realmente fácil es usar la dos2unixutilidad, pero si su sistema no la tiene o no puede obtenerla, puede lograr cosas similares con tr, por ejemplo:

echo $PATH | tr -d '\r'

Más ideas, como usar sed, están disponibles en elWikipediaentrada.

EDITAR: Debo señalar que $PATHno es un buen nombre de variable, ya que sin duda lo establece el entorno y otros programas pueden depender de su valor. Deberías considerar cambiarlo a algo como $CUR_PATH.

Respuesta2

Simplemente cambiaría la primera línea del script:

CONTENT=$(tr -d \\r < /path/to/text/file.txt)

información relacionada