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

为何用sh执行脚本时Shebang被忽略?文件读取失败排查

问题原因解析

1. Shebang被忽略的直接原因

当你主动用sh 脚本名的方式执行脚本时,系统会直接使用你指定的sh作为解释器,完全跳过脚本开头的Shebang行。只有当你直接执行脚本文件(比如./script.sh,且脚本已添加可执行权限)时,系统才会读取Shebang行,根据指定的路径调用对应的解释器(比如bash)。

2. $SHELL显示/bin/bash的误区

$SHELL是记录用户默认登录shell的环境变量,和当前运行脚本的shell进程无关。只要你的系统默认shell配置为bash,哪怕用sh、zsh等其他shell执行脚本,$SHELL都会输出/bin/bash,这并不代表当前脚本是用bash在运行。

3. 无法读取文件的核心问题

多数系统里的sh是POSIX标准的轻量shell(比如Debian/Ubuntu系中sh是dash的软链接),它不支持bash特有的语法特性。如果你的脚本用了bash专属的文件读取写法(比如content=$(<file.txt)),用sh执行时会因为语法不兼容报错,导致读取失败。换成POSIX兼容的写法(比如content=$(cat file.txt)),sh就能正常处理。

4. ps显示sh运行的逻辑

因为你明确指定了用sh来执行脚本,所以进程列表里显示的就是sh进程,这和脚本内的Shebang没有关联——Shebang仅在直接执行脚本文件时才会生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:55:03