Проблема со сценарием строки чтения в Cygwin

Смотрите на -name или -iname опции в find(1)

3
02.07.2013, 00:59
4 ответа

Как указано ott - Ваш сценарий имеет CR LF окончания строки. Это более видимо с od.

$ od -c script
0000000   #   !   /   b   i   n   /   b   a   s   h  \r  \n   w   h   i
0000020   l   e       r   e   a   d       n   a   m   e   ;       d   o
0000040  \r  \n   e   c   h   o       "   N   a   m   e       r   e   a
0000060   d       f   r   o   m       f   i   l   e       -       $   n
0000100   a   m   e   "  \r  \n   d   o   n   e       <       /   h   o
0000120   m   e   /   M   a   t   t   /   s   e   r   v   e   r   s   .
0000140   t   x   t  \r  \n
0000145

Как Вы видите, Вы имеете \r (возврат каретки) и \n символы (перевода строки) в конце каждой строки, где Вы должны только иметь \n персонажи. Это - результат проблемы совместимости между Windows, и *отклоняют системы. Bash испытывает затруднения при контакте с \r персонажи.

Можно исправить сценарий при помощи утилиты как dos2unix или путем выполнения следующей строки.

sed -i 's/\r$//' script
1
27.01.2020, 21:23
  • 1
    Это было моей проблемой. Спасибо за обеспечение простого способа зафиксировать его! –  mkrouse 02.07.2013, 17:12

Это - Ваш сценарий с hexdump

00000000  23 21 2f 62 69 6e 2f 62  61 73 68 0d 0a 77 68 69  |#!/bin/bash..whi|
00000010  6c 65 20 72 65 61 64 20  6e 61 6d 65 3b 20 64 6f  |le read name; do|
00000020  0d 0a 65 63 68 6f 20 22  4e 61 6d 65 20 72 65 61  |..echo "Name rea|

Строки заканчиваются 0d 0a иначе CR LF. Измените его на 0a или LF только.

1
27.01.2020, 21:23

файл, который вы используете, имеет линейку стиль Windows (CR) в конце их (то же самое, что случилось со мной, используя Cygwin на Windows XP).

Используйте «DOS2UNIX.exe», чтобы исправить, и вы должны быть в порядке:

$ dos2unix.exe script.sh

dos2unix: converting file script.sh to Unix format...

, затем перезагрузите свой скрипт, и эти сообщения об ошибках больше не должны появляться.

1
27.01.2020, 21:23

Проблема в том, что у вас есть файл сценария в формате, отличном от UNIX , вы можете использовать:

vi new_name_for_your_script

и выполнить копипасту (вы работаете в Windows)

ваша проблема будет решить.

0
27.01.2020, 21:23

Теги

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