在安卓 recovery 里运行 shell 脚本失败,提示 sh 文件 not found

2015-12-18 14:24:53 +08:00
 zztemp

安卓 recovery 模式下用 adb shell 连接,运行自定义的 he.sh 失败,提示 not found :

# ./he.sh
/sbin/sh: ./he.sh: not found

he.sh 文件内容( Unix LF ):
```bash

!/bin/bash

echo "hello world!"
```
权限设置:

# ls -l *.sh
-rwxr-xr-x 1 root shell 32 Dec 18 06:04 he.sh
-rwxr-xr-x 1 root shell 1918 Aug 1 2008 wifi-cal.sh

wifi-cal.sh 是自带的,可以运行; he.sh 自己丢过去的,提示 not found 。

请问这是哪里出了问题?如何解决?
P.S. 自己扔进去的二进制文件设置对应的权限后可以运行。

5298 次点击
所在节点    Linux
15 条回复
zztemp
2015-12-18 14:44:38 +08:00
he.sh 文件内容里有#的。 V2EX 的 markdown 对转义符处理得不太理想?
yeyeye
2015-12-18 14:47:54 +08:00
发帖之前点下预览是好习惯……

发出来之后不对也可以马上去编辑,但是……你给自己回复一下,似乎就不能修改了吧
zztemp
2015-12-18 14:57:12 +08:00
@yeyeye 在其他网站编辑时代码内的#要转义符, V2EX 预览异常,去掉后预览正常,但发出来却成了这样子。编辑过一次,再次编辑失败才回复的。
ttyant
2015-12-18 15:02:18 +08:00
哪来的 sh
des
2015-12-18 15:05:53 +08:00
!/system/bin/sh
echo "hello world!"
des
2015-12-18 15:06:29 +08:00
少了个 #

#!/system/bin/sh
echo "hello world!"
zztemp
2015-12-18 15:11:19 +08:00
@ttyant 因为是标题, shell 文件名简写了
zztemp
2015-12-18 15:12:00 +08:00
@des 有#,编辑格式时弄丢了。
402124773
2015-12-18 15:13:34 +08:00
!/bin/bash
改为!/system/bin/sh 看看
ynyounuo
2015-12-18 15:29:40 +08:00
@zztemp
是你自己 MD 用得不对
/t/244476
ilotuo
2015-12-18 15:34:05 +08:00
在 data 目录吗?
我记得可以这样:
cat s.sh > /system/bin/sh
chzyer
2015-12-18 16:11:23 +08:00
看样子像是./he.sh 没找到?写绝对路径试试?
zztemp
2015-12-18 21:49:45 +08:00
@des
才注意你其实已经指出是 sh 而不是 bash
谢谢~

@402124773
@ilotuo
@chzyer
已解决,见附言


@ynyounuo
原来可以在沙盒发帖,测试发现代码块之前需要有空行,语法不熟,哈哈,谢谢
Arthur2e5
2015-12-19 15:32:24 +08:00
bash 里面用 `$[expr]` 是老掉牙的语法,强烈不推荐使用。直接用 `$((expr))` 就是,还属于 POSIX 。

另外 expr 里面引用变量不需要用 $,直接像写 C 一样 $((a*b+c)) 就可以了。你甚至可以用 $((a+=2)) 这种赋值。
Arthur2e5
2015-12-19 15:37:19 +08:00
> 另外 expr
我是说上述的 expr 代表的表达式。

> 你甚至可以用 $((a+=2)) 这种赋值。
顺便补一句好了,配上空命令 `:`(或者 `true` 也可以啦)可以抛弃执行结果,于是就有了这样的语句:`: $((a+=2)) $((b=a*a))`。

* * *

shell 里面 sh 和 bash 的区别你自己说了一些,但是不全对。你可以看看:
https://stackoverflow.com/questions/5725296/difference-between-sh-and-bash
http://mywiki.wooledge.org/Bashism
https://github.com/koalaman/shellcheck/wiki/SC2039

其中最后一个的 shellcheck.net 本身是一个在线(也提供离线版)的 shell 静态检查工具,对于你这种新手会很有用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/244453

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX