@UniverseElement

Как прочитать файл построчно в bash?

Осваиваю bash. Пытаюсь создать символически ссылки на файлы, но натыкаюсь на следующую ошибку:
ln: не удалось получить доступ к '/usr/share/nginx/html/blabla.txt'$'\r': Нет такого файла или каталога

В конце строки добавляются '$'\r'.
Что такое \r понятно , а откуда берётся доллар и как от них избавиться?

Код:
while read str
        do
                $(ln /usr/share/nginx/html/$str /usr/share/nginx/html/tst/$str)
        done < /home/user/list.txt
  • Вопрос задан
  • 101 просмотр
Решения вопроса 1
@UniverseElement Автор вопроса
Проблему решил так:

while read str; do 
                str=${str/'\r'/} 
                ln "/usr/share/nginx/html/$str" "/usr/share/nginx/html/tst/$str" 
done < /home/user/list.txt
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@AVKor
Не надо использовать виндовые EOL. В никсах EOL = \n, а в винде EOL = \r\n
Ответ написан
xotkot
@xotkot
хорошо есть и хорошо весьма
это из за правки файлов linux из под windows/macos
для преобразования есть специальные утилиты в linux - это dos2unix/mac2unix и обратные им unix2dos/unix2mac

п.с.
$() здесь лишнее, а неизвестные пути желательно закавычивать, а то вдруг попадется строка с пробелом:
while read str; do
	ln "/usr/share/nginx/html/$str" "/usr/share/nginx/html/tst/$str"
done < /home/user/list.txt
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы