Приветствую,
Я пишу простой сценарий 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)