dos和unix中的python文件
我在dos和unix中的python文件,python,linux,Python,Linux,我在windows中有一些python文件,我通过samba将它们传输到我的gentoo 我检查他们的模式是否可执行,并使用/xxx.py运行该模式,但出现错误: :没有这样的文件或目录 我很不安,它没有提示什么文件不在这里 但是当我使用pythonxxx.py时,它可以以正确的方式运行 然后我在vim中使用set ff检查CR字符,发现它是dos,然后我使用set ff=unix设置它,现在它可以使用/xxx.py运行 但是我不知道当ff=dos时为什么可以使用pythonxxx.py?Win
windows
中有一些python文件,我通过samba将它们传输到我的gentoo
我检查他们的模式是否可执行,并使用/xxx.py
运行该模式,但出现错误:
:没有这样的文件或目录
我很不安,它没有提示什么文件不在这里
但是当我使用pythonxxx.py
时,它可以以正确的方式运行
然后我在vim中使用set ff
检查CR字符,发现它是dos
,然后我使用set ff=unix
设置它,现在它可以使用/xxx.py
运行
但是我不知道当
ff=dos
时为什么可以使用pythonxxx.py
?Windows行尾是CRLF,或者\r\n
Unix只使用\n
当操作系统读取您的shebang行时,它会看到#/usr/bin/python\r
。它无法运行此命令
从unix shell中查看此行为的一种简单方法是$(echo-e'python\r')
(它尝试作为命令运行python\r
)。此输出也将类似于:未找到命令
Windows下的许多高级代码编辑器都支持使用unix行尾进行本机保存。Windows行尾是CRLF,或
\r\n
Unix只使用\n
当操作系统读取您的shebang行时,它会看到#/usr/bin/python\r
。它无法运行此命令
从unix shell中查看此行为的一种简单方法是$(echo-e'python\r')
(它尝试作为命令运行python\r
)。此输出也将类似于:未找到命令
Windows下的许多高级代码编辑器都支持以unix行结尾进行本机保存。DOS文件以CR+LF结尾行,unix文件仅以LF结尾。这意味着,当Unix读取文件以确定可执行文件的名称时,该可执行文件的名称以CR结尾。如下所示:
#!/usr/bin/python
print("Blah!")
当我跑步时,我得到:
$ ./test.py
bash: ./test.py: /usr/bin/python^M: bad interpreter: No such file or directory
在您的情况下,CR字符(上面的^M)不会打印出来,而是由终端“执行”,即光标将返回到行的开头。因此,^M之前的所有内容都将被覆盖:
$ ./test.py
:错误的解释器:没有这样的文件或目录
这就是为什么在Unix上无法执行DOS文件结尾的文件
任何远程现代源代码控制系统都会为您处理此问题,并在您签出源代码时更改文件结尾。DOS文件以CR+LF结尾,Unix文件以LF结尾。这意味着,当Unix读取文件以确定可执行文件的名称时,该可执行文件的名称以CR结尾。如下所示:
#!/usr/bin/python
print("Blah!")
当我跑步时,我得到:
$ ./test.py
bash: ./test.py: /usr/bin/python^M: bad interpreter: No such file or directory
在您的情况下,CR字符(上面的^M)不会打印出来,而是由终端“执行”,即光标将返回到行的开头。因此,^M之前的所有内容都将被覆盖:
$ ./test.py
:错误的解释器:没有这样的文件或目录
这就是为什么在Unix上无法执行DOS文件结尾的文件
任何远程现代源代码管理系统都会为您处理此问题,并在您签出源代码时更改文件结尾。并非所有源代码管理系统都会自动损坏您的行结尾。例如,我知道git要求你打开
autocrlf
,如果你想要这个功能的话。不是所有的源代码管理系统都会自动损坏你的行尾。例如,我知道git要求您启用autocrlf
,如果您需要此功能。