我有一个 Vagrant 设置,其中包含一个 bash shell 配置脚本,该脚本在 Mac 上调用时运行良好,但在从 Windows 主机调用时不起作用。有效的行是调用 python 脚本的第一行:
foreman run ./manage.py syncdb --noinput
给出的错误是找不到python:
/usr/bin/env python
: File not found
我最初认为这只是一个行尾问题(CRLF v LF),但我检查了,行尾是正确的。
如果我 SSH 进入该框,并检查 /tmp/vagrant-shell (这是脚本作为安装的一部分复制到的位置),它看起来很好。如果我which python
在来宾 VM 上使用,我会得到 virtualenv 版本,这正是我所期望的。如果我检查环境变量,PYTHONPATH
并且PATH
设置也正确。
鉴于脚本被复制到虚拟机,然后从那里运行,很难理解从 Windows 或 OSX 主机运行的脚本之间如何存在差异(除了行尾)。
感激地收到任何帮助。
(虚拟机是 Ubuntu 12.04,32 位)
[更新 1]
我在provision.sh
文件上运行了 MD5 哈希,在四个不同的地方:
- 主机 Windows 机器,之后
git pull
- 来宾 VM,在 Windows 上运行,后置备
- 主机 OSX 机器,之后
git pull
- 来宾 VM,在 OSX 上运行,后置备
并且每个哈希值都是相同的 - 即运行在 OSX 上的 VM 上的文件是运行在 Windows 上的 VM 上的相同文件的字节匹配。
因此,它在设置时隐含在 VM 上。但是鉴于这台机器是在两者上使用相同的 VirtualBox VM 设置的 - 也许这是一个 VirtualBox 实现问题?
[更新 2:解决方法]
通过用./manage.py
完整的替换,python manage.py
我已经让脚本工作,这表明这是一个路径问题,但是我没有耐心进一步挖掘。它有效,现在可以。