Linux:以 root 身份运行时,Shebang 解释器会抱怨编码

Linux:以 root 身份运行时,Shebang 解释器会抱怨编码

奇怪的现象: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将序列转换为\nLinux中正确的sole。

当你运行时,shebang 会被视为注释

python /opt/updatednsfix.py

所以额外的字符并不重要。我的测试表明这python并不重要\r\n,并且工作做得很好。但是当root你选择另一种方式来运行脚本时:

/opt/updatednsfix.py

在这种情况下,shebang 正在被解释。/usr/bin/python^M找不到该文件 —— 因此出现错误。

为什么这只有在 root 下才会出现问题?

这与 无关root。真正的区别在于运行脚本的方法:python /opt/updatednsfix.pyvs. /opt/updatednsfix.py

相关内容