You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加Python3 Shebang后仍遭-bash: ./main.py: Permission denied问题求助

无法直接执行Python脚本,始终提示“Permission denied”

问题描述

我希望无需每次输入python3就能直接执行脚本,同时简化cron任务调度,但无论尝试何种方法,始终遇到错误:-bash: ./main.py: Permission denied。

我已尝试以下操作:

  • 为脚本添加#!开头的shebang,测试了/usr/bin/下所有Python版本,#!后加或不加空格均无效
  • 使用/usr/bin/env [python version]的方式调用不同Python版本
  • 给/usr/bin下所有Python文件设置chmod 777权限
  • 给脚本目录下所有文件和文件夹设置chmod 777权限
  • 运行脚本的用户同时属于root和wheel组
  • 以root身份运行脚本,仍得到相同错误
  • 确保所有脚本文件都添加了shebang

补充说明:我已重装bash和python,并对所有脚本执行dos2unix排除换行符问题,但仍未解决。

解决方案与排查方向

1. 检查文件系统挂载的noexec属性

执行mount命令查看脚本所在目录的挂载信息,如果挂载选项中包含noexec,意味着该分区禁止执行任何文件,这会导致即使设置了chmod +x也无法直接运行脚本。

  • 临时解决:执行mount -o remount,rw,exec /path/to/your/dir重新挂载目录
  • 永久解决:编辑/etc/fstab,移除对应分区的noexec选项,然后执行mount -a生效

2. 验证shebang的准确性

  • 先用which python3获取Python的绝对路径,比如输出/usr/local/bin/python3
  • 确保脚本第一行的shebang与该路径完全一致,例如#!/usr/local/bin/python3,或者使用#!/usr/bin/env python3(注意不要有多余空格或隐藏字符)
  • 用head -n1 main.py查看shebang是否正确,避免出现拼写错误或不可见字符

3. 检查SELinux/AppArmor安全策略

如果系统开启了SELinux,执行getenforce查看状态:

  • 若显示Enforcing,临时执行setenforce 0关闭SELinux后再测试脚本
  • 如果临时关闭后可以运行,需要调整SELinux上下文,执行chcon -t bin_t main.py为脚本设置可执行的上下文,或者添加自定义策略

4. 确认脚本所在分区的文件系统类型

FAT32、NTFS等非Linux原生文件系统不支持权限位设置,即使执行chmod +x也不会生效。如果脚本存储在这类分区上,需要将其移动到ext4、xfs等支持Linux权限的文件系统中。

5. 排查文件开头的特殊字符

除了换行符,脚本开头可能存在UTF-8 BOM等不可见字符,导致shebang失效:

  • 执行cat -A main.py查看文件开头是否有^@或\xef\xbb\xbf这类特殊字符
  • 如果存在,用sed -i '1s/^\xef\xbb\xbf//' main.py移除BOM字符

内容的提问来源于stack exchange,提问作者Binsky734

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 01:57:24