Команда file
указывает на проблему:
% file file*
file1: Bourne-Again shell script, ASCII text executable
file2: Bourne-Again shell script, ASCII text executable, with CRLF line terminators
Второй скрипт в формате "DOS". и поэтому не будет работать, как ожидалось. Вы можете преобразовать его с помощью dos2unix
, и теперь результаты будут такими же
% dos2unix file2
dos2unix: converting file file2 to Unix format...
% ls -l file1 file2
-rw-r--r-- 1 sweh sweh 41 Mar 19 11:23 file1
-rw-r--r-- 1 sweh sweh 41 Mar 19 11:25 file2
Когда вы пытаетесь использовать файл формата DOS с командами Unix, в конце каждой строки появляется завершающий элемент управления -M. Таким образом, строка, такая как
a=b
действительно установит a
в b, за которым следует контроль -M, сокращение^M
:
a=b^M
Каждая команда будет затронута аналогичным образом; например, простая строка с двухсимвольной командой ls
-попытается запустить трехсимвольную команду ls<control-M>
-, которой не существует.