Назад | Перейти на главную страницу

Bash Scripting: анализ содержимого файла в массив

Приветствую,

Я пишу простой сценарий 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 не обрезаются, поэтому я пытаюсь изменить путь к файлу, который включает новый символ строки.

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

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

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

echo $PATH | tr -d '\r'

Дополнительные идеи, например использование sed, доступны на Википедия вход.

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

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

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