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 dos2unix
utilitá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 $PATH
nã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)