注意:这个问题已经解决了。这是shebang行不工作的副本
这是我的:
#!/usr/bin/env php
<?php
echo "starting";
文件是可执行的"-rwxr-xr-x"
我将包含完整路径的文件称为
/var/projects/user-backup.php
但是我只得到错误消息":没有这样的文件或目录"
用
调用脚本php /var/projects/user-backup.php
导致字符串"Starting…"按预期显示。
即使当我尝试
/usr/bin/env php /var/projects/user-backup.php
一切正常,字符串"starting…"按预期显示。
我哪里错了?
EDIT1:像这样使用shebang:
#!/usr/bin/php
导致错误消息"^M: bad interpreter: No such file or directory"虽然确实有/usr/bin/php (/usr/bin/php ->/etc/alternatives/php,/etc/alternatives/php ->/usr/bin/php5)
我想我已经知道了(由于问题@EDIT1)。
关于[Wikipedia]的几句话:换行符(EOLNs):
-
:赢得" ' r ' n "(" ' x0D ' x0A ", CR + 低频
-
Nix :
- Linux
:" ' n "(" ' x0A ",低频
OSX :" ' r "(" ' x0D ", CR)
你的.php文件有Win样式EOLNs(至少是shebang行),而一些Nix解释器不喜欢CR,这里就是这种情况。
作为边注,Nano(或任何体面的编辑器,事实上)在编辑文件时计算出文件中的行结尾,并且在添加新行时,它们的EOLNs与现有的一致。
要使其工作,将文件EOLNs转换为Nix (Linux)样式:
dos2unix /var/projects/user-backup.php
可能还想阅读[SO]: Flask CLI抛出'OSError: [Errno 8] Exec格式错误',当运行通过docker-compose (@CristiFati的答案)。
将/usr/bin/php
放入/etc/shells
文件
是行尾!!虽然我使用"nano"在一个窗口中编辑文件,但我仍然得到了window -line-ending。
使用"dos2unix"转换所有行尾后,事情解决了!
比较这个问题的答案:Shebang line不工作