周三下午,我在终端里敲下chmod +x hello.py,又输入./hello.py,屏幕却弹出一行刺眼的红色:Permission denied

755权限明明给了,文件名也没错,问题出在哪?

打开网易新闻 查看精彩图片

折腾了二十分钟才发现,罪魁祸首是第一行的shebang。当脚本缺少有效的解释器路径时,内核会尝试直接执行这个文件,结果必然是权限拒绝。补上#!/usr/bin/env python3或者精确的#!/usr/bin/python3,重新chmod一次,程序终于跑了起来。

这个坑的隐蔽之处在于,它跟权限本身毫无关系。你在机器A上写的脚本,移到机器B上就可能触发——因为Python路径变了,或者环境变量不同。/usr/bin/env的优势正是动态查找解释器,硬编码路径则更快但不够灵活。

很多开发者习惯复制粘贴旧脚本的头部,却忘了检查目标机器的实际环境。一个小细节,能让调试时间从两分钟变成两小时。

你遇到过类似的shebang陷阱吗?