Странное явление: скрипт Python запускается как непривилегированный пользователь, но отказывается от имени root:

doprea@mlll2584:~$ python /opt/updatednsfix.py
Please retry with super-user privileges

$ sudo su
# /opt/updatednsfix.py 
bash: /opt/updatednsfix.py: /usr/bin/python^M: bad interpreter: No such file or directory

dos2unix исправил это (работает как root, ниже). Почему это проблема только под root?

# dos2unix /opt/updatednsfix.py 
dos2unix: converting file /opt/updatednsfix.py to Unix format ...

# /opt/updatednsfix.py 
A record successfully updated in DNS
IPV4 PTR records successfully updated in DNS

1 ответ1

1

В конце твоего шебанга был дополнительный персонаж. ^M означает CR или (другое обозначение) \r . Это была часть последовательности \r\n , которая является последовательностью конца строки в DOS и Windows. dos2unix преобразовал последовательность в единственную \n что правильно в Linux.

Shebang рассматривается как комментарий при запуске

python /opt/updatednsfix.py

поэтому дополнительный символ не имеет значения. Мой тест показывает, что python не против \r\n и делает свою работу просто правильно. Но в качестве пользователя root вы выбрали другой способ запуска скрипта:

/opt/updatednsfix.py

и в этом случае Шебанг интерпретируется. Файл /usr/bin/python^M не найден - следовательно, ошибка.

Почему это проблема только под root?

Дело не в root . Реальное отличие было в том, как вы запускаете скрипт: python /opt/updatednsfix.py против /opt/updatednsfix.py .

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