Почему я получаю сообщение «строка 1: $ ': \ r': команда не найдена»?

После вашей команды brctl addbr br0 Вам необходимо подключить новый мост к реальному сетевому интерфейсу, например eth0 , ведьма подключена к Интернету. Используйте для этого следующую команду brctl addif br0 eth0 .

12
25.10.2020, 16:51
7 ответов

Это происходит из-за того, что сценарий был сохранен редактором, который использует окончания строки -DOS (, например Notepad++, например ). Вам придется удалить их из ваших скриптов.

Для этого либо используйте dos2unixв файле скрипта, либо

$ tr -d '\r' <script >script.new && mv script.new script

(это удалит все возвраты каретки из в любом месте в скрипте)


Что касается кода в скрипте:

:
iter=1
if [ -f iter.txt ]
   then rm./iter.txt 
fi  

Возможно, это должно выглядеть примерно так

iter=1
if [ -f "./$iter.txt" ]; then
   rm "./$iter.txt"
fi

Это удаляет файл 1.txtиз текущего каталога, если он существует. Команда :ничего не делает (почти )и может быть удалена. Значение переменной iterследует использовать как $iterи заключать в кавычки. И затем я, возможно, выражаюсь более явно, чем нужно, используя ./, чтобы сказать, что файл должен быть найден в текущем каталоге.

Если вы планируете превратить это в цикл (здесь, удалив все файлы 1.txt, 2.txt,...,10.txt):

iter=1
while [ "$iter" -le 10 ]; then
    if [ -f "./$iter.txt" ]; then
        rm "./$iter.txt"
    fi
    iter=$(( iter + 1 ))
done

Или, если мы чувствуем себя подлыми/ленивыми,

rm -f {1..10}.txt

в оболочках, понимающих раскрытие скобок.

10
20.08.2021, 11:32

У вас окончание строк в стиле Windows -.

Команда «нет» -:вместо этого читается как :<carriage return>, отображается как :\rили более полно как $':\r'.

Запустите dos2unix scriptname, и все будет в порядке.


Если у вас нет dos2unix, следующее должно работать почти везде (, и я тестировал MobaXterm в Windows):

vi -b filename

Затем в viвведите:

:%s/\r$//
:x

Можете идти.


В vim, который вы используете в Cygwin для vi, есть несколько способов сделать это. Другой включает настройку fileformat, которая может принимать значения dosили unix.Либо явно измените его после загрузки файла с помощью

set fileformat=unix
, либо явно форсируйте формат файла при записи файла с помощью
:w +fileformat=unix
.

Для получения дополнительной информации см. множество вопросов и ответов, посвященных этой теме, в том числе:

33
20.08.2021, 11:32

В ваших сценариях неправильные окончания строки -. Windows использует CR+LF (\r\n ), Unix использует LF (\n ), а Classic MacOS использует CR (\r ). Вам нужно будет изменить окончания строки -во всех затронутых файлах либо с помощью текстового редактора, либо с помощью отдельного инструмента, такого как dos2unix.

FTP и системы контроля версий, такие как SVN, как правило, умеют правильно преобразовывать окончания строк, поэтому в будущем вы можете изучить эти возможности для передачи файлов.

Если эти файлы не передаются , а просто используются на одном компьютере, вам нужно будет найти настройки окончания строки в предпочитаемом вами текстовом редакторе. Большинство из тех, что рекламируются как «для программистов», будут иметь такую ​​возможность.

5
20.08.2021, 11:32

В качестве дополнительного ответа позвольте мне добавить пару заметок/советов...

Во-первых, для обычных текстовых файлов вы можете легко определить, имеют ли они окончание строки Unix или DOS, используя команду file. Например:

$ file test.txt
test.txt: ASCII text, with CRLF line terminators
$ dos2unix test.txt
dos2unix: converting file test.txt to Unix format...
$ file test.txt
test.txt: ASCII text

Обратите внимание на использование dos2unix. Я настоятельно рекомендую вам установить его. В зависимости от того, как вы используете Cygwin, вы можете обнаружить, что вам нужно делать это преобразование достаточно часто, чтобы его удобство приветствовалось. Что еще более важно, нет возможности ошибки, как при ручном редактировании, обсуждаемом здесь.

Для установки запустите основной исполняемый файл Cygwin. Это тот, который называется setup -x86 _64.exe или что-то в этом роде. Убедитесь, что вы видите такой экран:

enter image description here

Поскольку вы уже выполнили первичную установку, вы должны нажимать Далее до тех пор, пока не появится экран выбора. Выберите «Полный» в раскрывающемся списке, введите «dos2» в поле поиска и выберите инструмент, как показано здесь :

.

enter image description here

Затем снова нажмите Далее и дождитесь завершения установки. Вот и все. Развлекайся. Cygwin, за исключением этого случайного неудобства, — отличный пакет.

3
20.08.2021, 11:32

Я использую Notepad++ для редактирования своих сценариев bash (.sh )путем подключения к серверу с помощью WinSCP
(Чтобы настроить редактор WinSCP на Notepad++:https://winscp.net/eng/docs/ui_editor_preferences)

Это очень удобно для открытия файлов с серверов для редактирования/сохранения вместо «Vim » редактора.
Когда вы открываете файл в Notepad++ , дважды -щелкните по 7-му столбцу в строке состояния внизу и выберите «Unix (LF )».

enter image description here

Кроме того, вы должны изменить 8-й код, выбрав «Кодировка» -> «Кодировать в UTF» -8 в верхней панели.

1
20.08.2021, 11:32

Если не dos2unix, то есть и 'flip'

$ flip -u имя_файла.txt

переключит его на использование окончаний строк unix.

1
20.08.2021, 11:32

Вам не нужно менять фактическую кодировку строки файла, чтобы Cygwin Bash успешно работал с кодировками строк конца -из -. Есть вариант, который вам просто нужно перевернуть.

Просто обновите свой ~/.bash_profile, чтобы он содержал

export SHELLOPTS
set -o igncr

См.https://ptolemy.berkeley.edu/projects/chess/softdevel/faq/5.html

0
20.08.2021, 11:32

Теги

Похожие вопросы