Скриптинг Bash: преобразование содержимого файла в массив

Скриптинг Bash: преобразование содержимого файла в массив

Привет,

Я пишу простой скрипт bash, который должен разобрать содержимое файла в массив. Записи в файле разделены символами "новой строки" — так что файл будет выглядеть примерно так:

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

Я хотел бы проанализировать содержимое и выполнить итерацию по нему. Мой код в настоящее время выглядит так:

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

Этот код отлично работает с файлом с окончаниями строк UNIX. Однако с текстовым файлом в формате Windows он ужасно тормозит. Оператор "echo $PATH" выдает правильный путь, но chmod не работает, сообщая, что файл не существует. Моя сноровка в том, что окончания строк Windows не обрезаются, поэтому он пытается chmod для пути к файлу, который включает символ новой строки.

Мне нужно, чтобы эта штука работала независимо от того, был ли создан целевой файл с помощью символов новой строки Unix или Windows, но, поскольку я новичок в написании сценариев оболочки, я не совсем уверен, как это сделать.

Я ценю вашу помощь!

решение1

Похоже, вам просто нужно удалить возврат каретки при обработке каждой строки. Самый простой способ — использовать утилиту dos2unix, но если в вашей системе ее нет или вы не можете ее получить, вы можете сделать похожие вещи с помощью tr, например:

echo $PATH | tr -d '\r'

Больше идей, таких как использование sed, доступно наВикипедиявход.

РЕДАКТИРОВАТЬ: Я должен отметить, что $PATHэто не очень хорошее имя переменной, поскольку оно, несомненно, устанавливается средой, и другие программы могут зависеть от его значения. Вам следует рассмотреть возможность изменения его на что-то вроде $CUR_PATH.

решение2

Я бы просто изменил первую строку скрипта:

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

Связанный контент