Bash Scripting: Analise o conteúdo do arquivo na matriz

4

Saudações

Estou escrevendo um script simples que precisa analisar o conteúdo de um arquivo em uma matriz. As entradas no arquivo são delimitadas por "nova linha", para que o arquivo seja parecido com isto:

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

Gostaria de analisar os conteúdos e fazer uma iteração sobre eles. 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

Esse código funciona muito bem com um arquivo com terminações de linha do UNIX. Com um arquivo de texto formatado no Windows, no entanto, ele se afunda miseravelmente. A instrução "echo $ PATH" produz o caminho correto, mas o chmod falha dizendo que o arquivo não existe. Meu jeito é que as terminações de linha do Windows não estão sendo aparadas, então está tentando chmod um caminho de arquivo que inclui um novo caractere de linha.

Eu preciso fazer essa coisa funcionar independentemente de o arquivo de destino ter sido criado com as novas linhas do Unix ou do Windows - mas, considerando que sou um pouco novo no shell de script, não tenho certeza de como fazer isso.

Agradeço sua ajuda!

    
por Skone 26.01.2010 / 01:30

2 respostas

5

Parece que você só precisa remover o retorno de carro ao processar cada linha. A maneira mais fácil é usar o utilitário dos2unix , mas se o seu sistema não tem isso ou você não pode obtê-lo, você pode fazer coisas parecidas com tr , por exemplo:

echo $PATH | tr -d '\r'

Mais ideias, como a utilização de sed , estão disponíveis na entrada Wikipedia .

EDIT: Devo salientar que $PATH não é um ótimo nome de variável, já que é indubitavelmente definido pelo ambiente e outros programas podem depender do seu valor. Você deve considerar alterá-lo para algo como $CUR_PATH .

    
por 26.01.2010 / 01:41
3

Eu acabei de alterar a primeira linha do script:

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

    
por 26.01.2010 / 02:17

Tags