/usr/bin/env:'python3\r':没有这样的文件或目录

/usr/bin/env:'python3\r':没有这样的文件或目录

我正在尝试使我的.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/binpython3脚本的文件名作为参数来执行文件。这显然会失败,因为这/usr/bin是一个目录并且没有可执行文件。

相关内容