Как создать учетную запись пользователя root в Debian?

Я могу получить ту же ошибку, если первая строка заканчивается только CR (вместо LF):

$ echo -en '#!/bin/bash\rexport foo=bar\n' > test.sh
$ chmod +x test.sh
$ ./test.sh
export: bad interpreter: No such file or directory

Что происходит, так это то, что ядро ​​выглядит для программы-интерпретатора с именем / bin / bash \ rexport , не находит ее и выдает ошибку. Bash выводит сообщение об ошибке с именем файла

bash: ./test.sh: /bin/bash\rexport: bad interpreter: No such file or directory

, но, поскольку возврат каретки перемещает вывод обратно в начало строки, вы видите только

export: bad interpreter: No such file or directory

Таким образом, проблема, похоже, связана с окончанием строки.

Обратите внимание, что с окончанием строки CRLF в стиле DOS результат будет другим, так как теперь есть LF для завершения строки.

$ echo -en '#!/bin/bash\r\nexport foo=bar\n' > test.sh
$ ./test.sh    
bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory

Хотя я не знаю, почему на этот раз bash цитирует CR при выводе как ^ M .


IIRC - единственный CR в виде окончания строки - это пережиток старых систем Mac, и dos2unix , похоже, не исправляет его по умолчанию. Вам нужно будет использовать mac2unix или dos2unix -c mac .

Что-то вроде этого должно также превратить все CR или CRLF в окончание строк LF в стиле Unix, если у вас смешаны все стили и нет необходимости в CR в каком-либо другом смысле.

sed 's/\r/\n/g;s/\n$//' backup.sh
3
27.05.2015, 09:36
0 ответов

Теги

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