Script Bash: analise o conteúdo do arquivo em uma matriz

Script Bash: analise o conteúdo do arquivo em uma matriz

Saudações,

Estou escrevendo um script bash simples que precisa analisar o conteúdo de um arquivo em um array. As entradas no arquivo são delimitadas por "nova linha" - então o arquivo ficaria mais ou menos assim:

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

Eu gostaria de analisar o conteúdo e iterá-lo. Meu código atualmente se parece com:

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

Este código funciona muito bem com um arquivo com finais de linha UNIX. Com um arquivo de texto formatado no Windows, no entanto, ele engasga miseravelmente. A instrução "echo $PATH" produz o caminho correto, mas o chmod falha ao dizer que o arquivo não existe. Meu jeito é que os finais de linha do Windows não estão sendo cortados, então estou tentando chmod um caminho de arquivo que inclui um novo caractere de linha.

Preciso fazer isso funcionar, independentemente de o arquivo de destino ter sido criado com novas linhas do Unix ou do Windows - mas como sou novo em scripts de shell, não tenho certeza de como fazê-lo.

Eu aprecio sua ajuda!

Responder1

Parece que você só precisa remover o retorno de carro ao processar cada linha. A maneira realmente fácil é usar o dos2unixutilitário, mas se o seu sistema não tiver isso ou você não conseguir, você pode realizar coisas semelhantes com tr, por exemplo:

echo $PATH | tr -d '\r'

Mais ideias, como usar sed, estão disponíveis no siteWikipédiaentrada.

EDITAR: Devo ressaltar que $PATHnão é um bom nome de variável, pois é sem dúvida definido pelo ambiente e outros programas podem depender do seu valor. Você deve considerar alterá-lo para algo como $CUR_PATH.

Responder2

Eu apenas mudaria a primeira linha do script:

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

informação relacionada