1

У меня странная ситуация, когда некоторые из моих сценариев оболочки используют #!/bin/sh как иногда работает shebang - иногда они выдают следующее сообщение:

bash: ./newshit.sh: /bin /sh ^ M: плохой интерпретатор: нет такого файла или каталога

Есть что-то простое, что мне не хватает?

2 ответа2

2

То, что ^ M - пустая раздача - похоже, что в скрипте есть окончания строк в Mac (Ctrl-M) вместо концовок Unix (Ctrl-J).

Он не будет выглядеть как литерал ^ M - фактически, в зависимости от вашего текстового редактора, он может вообще не отображаться.

Вы не говорите, какая у вас операционная система, поэтому я не уверен, какие инструменты у вас есть в вашей системе, но не могли бы вы попытаться получить символьный (не шестнадцатеричный) дамп с помощью:

od -tc newshit.sh

... и скажите нам, следует ли за /bin /sh \r, \n или \r \n?

Я ожидаю, что вы увидите что-то вроде:

0000000   #   !   /   b   i   n   /   s   h  \r

Или если вы запустите:

cat -e newshit.sh

... который будет отображать символ возврата каретки, если он там есть.

2

dos2unix newshit.sh это исправит.

Изменить: В качестве альтернативы, если по какой-то причине вы не можете найти dos2unix, этот простой скрипт сделает это:

tr -d '\r' < newshit.sh > newshit-fixed.sh 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .