У вас есть возврат каретки (окончание строк текстового файла Windows) в вашем сценарии bash. Удалить их.
Файл Баша должен выглядеть следующим образом под hexdump -C
:
00000000 63 64 20 2f 76 61 72 2f 77 77 77 2f 70 61 74 68 |cd /var/www/path|
00000010 2f 74 6f 2f 66 6f 6c 64 65 72 0a 67 69 74 20 70 |/to/folder.git p|
00000020 75 6c 6c 0a |ull.|
00000024
Но у вас выглядит, как это вместо:
00000000 63 64 20 2f 76 61 72 2f 77 77 77 2f 70 61 74 68 |cd /var/www/path|
00000010 2f 74 6f 2f 66 6f 6c 64 65 72 0d 0a 67 69 74 20 |/to/folder..git |
00000020 70 75 6c 6c 0d 0a |pull..|
Примечания дополнительных 0d
«с (шестнадцатеричным 0D = десятичная 13 = ASCII каретки return, POSIX \r
) перед 0a
s (hex 0A = decimal 10 = ASCII linefeed, POSIX \n
, что и bash рассматривает как конец строки).
Возврат каретки не является пробелом в bash, поэтому он рассматривается как часть имени файла и команды git. При печати он перемещает курсор в начало строки, поэтому ваш вывод выглядит так. Он печатает что-то вроде "foo.bash: line 1: cd: /www/path/to/folder\r: No such file or directory"
, но \r
заставляет курсор перемещаться к началу строки и перезаписывать первую часть сообщения с помощью части ": No such file or directory"
.
Там есть программа под названием dos2unix
, что вы можете использовать этот файл, чтобы удалить возврат каретки:
dos2unix filename >newfilename
Или вы могли бы использовать tr
команду:
tr -d $'\r' <filename >newfilename
прочитать файл оргии с чем-то вроде 'hexdump -C' и проверьте, нет ли в файле неожиданного символа, такого как' 0d'. – ymonad
Что происходит, когда вы запускаете 'sh -x script_name.sh'? – supercheetah