Docker中Debian:stretch执行./yii报错/usr/bin/env: 'php\r': 无此文件或目录
解决方法:修复脚本中的Windows换行符问题
这个问题我之前也碰到过!根源就是你的yii脚本里的换行符是Windows的CRLF格式(\r\n),而Linux系统只认LF(\n),所以第一行的#!/usr/bin/env php被解析成了#!/usr/bin/env php\r,系统自然找不到叫php\r的命令。下面给你几个靠谱的解决办法:
方法1:用dos2unix转换文件(最直观)
Debian默认没装这个工具,先安装:
apt-get update && apt-get install -y dos2unix
然后直接转换你的yii脚本:
dos2unix ./yii
转换完再运行./yii应该就正常了。
方法2:用sed命令直接替换(无需额外安装工具)
如果不想装新工具,用Linux自带的sed命令去掉每行末尾的\r字符:
sed -i 's/\r$//' ./yii
这个命令会遍历文件,把每行结尾的\r替换为空,相当于把CRLF转成LF。
方法3:检查Git换行符设置(如果代码来自Git仓库)
如果你的代码是从Windows环境提交的Git仓库拉过来的,可能Git自动把LF转换成了CRLF。可以在Linux容器里修改Git配置,禁止自动转换:
git config --global core.autocrlf false
之后重新拉取代码,或者用上面的方法转换已有的文件,避免以后再出现这个问题。
为什么用nano修改没用?
nano默认不会显示\r字符,而且默认保存时可能还是用原来的换行符格式。如果你想用nano修复,可以打开文件后,按Ctrl+O准备保存,然后按Alt+D切换换行符格式为Unix,再按回车保存,这样就能把CRLF转成LF了。
内容的提问来源于stack exchange,提问作者Shaf
相关产品推荐
相关产品推荐

