4

В одном из моих сценариев bash я создаю файл, многократно используя echo с перенаправлением вывода для добавления в файл. Полученный файл, однако, не имеет правильного имени, но к концу всегда добавляется непечатаемый символ ^M Кто-нибудь знает, что я делаю не так? Следующий простой скрипт демонстрирует проблему:

#!/bin/bash
# Should create 'concat.txt' instead creates 'concat.txt^M'
outfile="concat.txt"
echo "'"$outfile"'"
for item in "Able" "Baker" "Charlie"; do
    echo $item >> $outfile
done

Система: Ubuntu 9.04 (x64)

2 ответа2

12

Я подозреваю, что вы где-то редактировали файл, в котором были добавлены окончания строк в стиле DOS. Запустите ваш файл через dos2unix чтобы избавиться от них.

dos2unix yourscriptfile
4

^M - это то, что вы увидите в конце каждой строки, если вы установите конец строки в режим unix, когда файл был изначально записан в режиме dos, где окончания строк \r\n

Итак, пока вы видите

echo $item >> $outfile

Unix видит:

echo $item >> $outfile^M

Первый,

:set ff=unix

Затем:

:%s/\r//

удалить ^ M

РЕДАКТИРОВАТЬ

По какой-то глупой причине я предположил, что вы используете vim. Возможно, потому что это единственный редактор, который я видел, показывает \r как ^M В любом случае, делайте то, что сказал Деннис Уильямсон, используйте инструмент dos2unix .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .