![/usr/bin/env:'python3\r':没有这样的文件或目录](https://linux22.com/image/1146623/%2Fusr%2Fbin%2Fenv%EF%BC%9A'python3%5Cr'%EF%BC%9A%E6%B2%A1%E6%9C%89%E8%BF%99%E6%A0%B7%E7%9A%84%E6%96%87%E4%BB%B6%E6%88%96%E7%9B%AE%E5%BD%95.png)
我正在尝试使我的.py
文件可执行,以便可以使用来运行它们./filename.py
,但它对我来说不起作用。
我所做的就是添加shebang#!/usr/bin python3
并使用命令chmod +x filename.py
。当我./filename.py
以普通用户身份运行时,我收到以下错误消息
bash: ./filename.py: /usr/bin: bad interpreter: Permission denied
作为超级用户,它告诉我的是:
sudo: unable to execute ./filename.py: Permission denied
用通常的方法打开文件(python3 filename.py
)可以正常工作。
当我将 shebang 改为它时#!/usr/bin/env python3
,它告诉我这个:
/usr/bin/env: ‘python3\r’: No such file or directory
答案1
问题在于您的行尾字符。您的文件是在 Windows 系统上创建或编辑的,并使用 Windows/DOS 样式的行尾 (CR+LF),而 Ubuntu 等 Linux 系统则需要 Unix 样式的行尾 (LF)。
有一个简单的工具可以为您转换两种不同的风格dos2unix
。
通过运行安装
sudo apt install dos2unix
之后,你可以使用以下任一命令向任一方向转换文件
dos2unix /PATH/TO/YOUR/WINDOWS_FILE
unix2dos /PATH/TO/YOUR/LINUX_FILE
例子:
$ cat test.py
#!/usr/bin/env python3
print("ok")
$ ./test.py
/usr/bin/env: ‘python3\r’: No such file or directory
$ dos2unix test.py
dos2unix: converting file test.py to Unix format ...
$ ./test.py
ok
为了回到你第一次尝试的内容,shebang 行
#!/usr/bin python3
当然是错误的。它尝试使用/usr/bin
和python3
脚本的文件名作为参数来执行文件。这显然会失败,因为这/usr/bin
是一个目录并且没有可执行文件。