2014-11-27 3 views
3

У меня есть Баш файл с содержаниемБаш команда усечения

cd /var/www/path/to/folder 
git pull 

Когда я запускаю это я получаю

: No such file or directorywww/path/to/folder 
' is not a git command. See 'git --help'. 

Did you mean this? 
     pull 

Любая идея, почему Баш получает усеченную версию команд?

+0

прочитать файл оргии с чем-то вроде 'hexdump -C' и проверьте, нет ли в файле неожиданного символа, такого как' 0d'. – ymonad

+0

Что происходит, когда вы запускаете 'sh -x script_name.sh'? – supercheetah

ответ

3

У вас есть возврат каретки (окончание строк текстового файла 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 
Смежные вопросы