Termux执行test.sh脚本出现文件不存在错误求助
问题:Termux中执行bash脚本出现shebang错误但内容正常输出
问题详情
脚本test.sh内容:
#!/data/data/com.termux/files/usr/bin/env bash echo "Hello World"
已执行termux-fix-shebang修复shebang,且安装了最新版Termux-exec,但执行bash test.sh时仍报错:
line 1: #!/data/data/com.termux/files/usr/bin/env: No such file or directory
不过脚本的Hello World内容可正常输出。补充命令输出:
~/.../journal/nginx_config $ od -t x1 <test.sh 0000000 ef bb bf 23 21 2f 64 61 74 61 2f 64 61 74 61 2f 0000020 63 6f 6d 2e 74 65 72 6d 75 78 2f 66 69 6c 65 73 0000040 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 62 61 73 0000060 68 0a 65 63 68 6f 20 22 48 65 6c 6c 6f 20 57 6f 0000100 72 6c 64 22 0000104 ~/.../journal/nginx_config $ type env env is /data/data/com.termux/files/usr/bin/env
错误原因
从od的输出可以看到,文件开头存在ef bb bf字节序列——这是UTF-8 BOM(字节顺序标记)。bash解析shebang行时,会把BOM作为路径的一部分,导致实际查找的是带BOM前缀的#!/data/data/com.termux/files/usr/bin/env,而非正确的env路径,因此抛出"不存在"的错误。但bash会忽略该错误继续执行后续脚本内容,所以echo命令能正常输出。
解决方法
去掉文件开头的UTF-8 BOM即可,以下是几种可行方式:
- 使用
sed命令直接修改文件:sed -i '1s/^\xef\xbb\xbf//' test.sh - 使用
dos2unix工具(需先安装:pkg install dos2unix):dos2unix test.sh - 在Vim编辑器中打开文件后,执行命令去掉BOM并保存:
:set nobomb :w
内容的提问来源于stack exchange,提问作者velw
相关产品推荐
相关产品推荐

