Termux直接运行Bash脚本报Bad Interpreter权限拒绝 加bash可执行
Termux下Bash脚本Bad Interpreter报错排查修复
遗漏的核心排查点
- 分区挂载权限限制(最高发的Termux特有问题)
执行mount | grep $(pwd)查看当前脚本所在目录的挂载参数,如果输出包含noexec标识,就是问题根源。安卓系统默认对共享存储(/sdcard、/storage/emulated/0路径)、外置SD卡分区加noexec挂载限制,禁止直接运行分区内的任何可执行文件,该限制是系统级的,无论怎么修改文件权限(包括你设置的chmod 777)都无法绕过。
修复方法:将脚本移动到Termux私有可执行目录,比如执行mv ./getcrypt.sh ~/,切换到家目录后再执行脚本即可。 - 脚本换行符格式错误
移动端部分文本编辑器默认使用Windows风格的CRLF换行符,会导致脚本首行shebang末尾多一个不可见的\r回车符,系统识别解释器路径时会把该字符计入路径,触发解释器识别异常。
修复方法:执行sed -i 's/\r$//' getcrypt.sh清除多余回车符,或安装dos2unix工具执行dos2unix getcrypt.sh将脚本转为Unix标准的LF换行格式。 - 文件名输入错误
你提供的执行记录中先后出现了getcrypt.sh和get-crypt.sh两个不同文件名,差一个连字符,执行命令前先通过ls核对当前目录下的实际文件名,避免输错路径触发文件不存在报错。
现象对应说明
你之前配置的chmod权限、默认shell切换、PATH优先级调整都是正确的,但这些配置仅在支持exec权限的挂载分区上生效,碰到noexec系统限制会直接被拦截,才会出现直接执行脚本报权限拒绝的问题。bash 脚本名可以正常执行的原因是:该命令先启动Termux私有目录下的bash程序(本身具备可执行权限),再把脚本作为普通文本读取解析,不需要脚本本身具备可执行权限,也不要求脚本所在分区支持exec挂载,因此可以正常运行。
内容的提问来源于stack exchange,提问作者user192085
相关产品推荐
相关产品推荐

