Смотрите на -name
или -iname
опции в find(1)
Как указано 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
Это - Ваш сценарий с 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
только.
файл, который вы используете, имеет линейку стиль Windows (CR) в конце их (то же самое, что случилось со мной, используя Cygwin на Windows XP).
Используйте «DOS2UNIX.exe», чтобы исправить, и вы должны быть в порядке:
$ dos2unix.exe script.sh
dos2unix: converting file script.sh to Unix format...
, затем перезагрузите свой скрипт, и эти сообщения об ошибках больше не должны появляться.
Проблема в том, что у вас есть файл сценария в формате, отличном от UNIX , вы можете использовать:
vi new_name_for_your_script
и выполнить копипасту (вы работаете в Windows)
ваша проблема будет решить.