jco*_*lum 20 python bash scripts
试图让 casperjs 在 Ubuntu 12.04 上运行。在我运行时安装它后,我得到:
09:20 $ ll /usr/local/bin/casperjs
lrwxrwxrwx 1 root root 26 Nov 6 16:49 /usr/local/bin/casperjs -> /opt/casperjs/bin/casperjs
09:20 $ /usr/bin/env python --version
Python 2.7.3
09:20 $ cat /opt/casperjs/bin/casperjs | head -4
#!/usr/bin/env python
import os
import sys
09:20 $ casperjs
: No such file or directory
09: 22 $ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06)
[GCC 4.6.3] on linux2
Run Code Online (Sandbox Code Playgroud)
所以 Python 存在且可运行,casperjs 指向正确的位置,它是一个 Python 脚本。但是当我运行它时,我得到“没有这样的文件”。
我可以通过更改 casperjs python 文件的第一行来修复它:
#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)
到:
#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)
结果:
$ casperjs --version
1.1.0-DEV
Run Code Online (Sandbox Code Playgroud)
我设法修复了它,但我想知道为什么它不能与 一起使用#!/usr/bin/env python,因为这似乎是一条普通的解释器行。我有什么配置错误吗?
以下是获取 casperjs 的步骤:
$ git clone git://github.com/n1k0/casperjs.git
$ cd casperjs
$ ln -sf `pwd`/bin/casperjs /usr/local/bin/casperjs
$ casperjs
: No such file or directory
Run Code Online (Sandbox Code Playgroud)
Gil*_*il' 39
如果您看到错误“: No such file or directory”(冒号前没有任何内容),则表示您的 shebang 行末尾有回车,大概是因为它是在 Windows 下编辑的(使用 CR,LF 作为行分隔符)。CR 字符使光标在 shell 打印消息的开头后移回行的开头,因此您只能看到 CR 之后的部分,该部分结束了作为错误消息一部分的解释器字符串。
删除 CR:shebang 行需要有一个 Unix行结尾(仅换行)。Python 本身允许 CRLF 行结尾,因此其他行上的 CR 字符不会受到伤害。另一方面,Shell 脚本必须不含 CR 字符。
要删除 Windows 行结尾,您可以使用dos2unix:
sudo dos2unix /usr/local/bin/casperjs
Run Code Online (Sandbox Code Playgroud)
或 sed:
sudo sed -i -e 's/\r$//' /usr/local/bin/casperjs
Run Code Online (Sandbox Code Playgroud)
如果您必须在 Windows 下编辑脚本,请使用能够处理 Unix 行尾的编辑器(即比记事本更少脑残的东西),并确保在编辑 Unix 文件时将其配置为写入 Unix 行尾(即仅 LF)。