奇怪的现象: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
你的shebang末尾有一个额外的字符。^M
表示CR
或(另一种表示法)\r
。 它是序列的一部分\r\n
,是DOS和Windows中的行尾序列。dos2unix
将序列转换为\n
Linux中正确的sole。
当你运行时,shebang 会被视为注释
python /opt/updatednsfix.py
所以额外的字符并不重要。我的测试表明这python
并不重要\r\n
,并且工作做得很好。但是当root
你选择另一种方式来运行脚本时:
/opt/updatednsfix.py
在这种情况下,shebang 正在被解释。/usr/bin/python^M
找不到该文件 —— 因此出现错误。
为什么这只有在 root 下才会出现问题?
这与 无关root
。真正的区别在于运行脚本的方法:python /opt/updatednsfix.py
vs. /opt/updatednsfix.py
。