tweak中如何执行一段shell脚本

我使用system()方法执行一段脚本,但是没有起到作用,脚本没有执行?请问大家是怎么在tweak中执行一段脚本的,这里有哪些需要注意的问题?

执行一段脚本的话就用system()即可,没起作用的原因可能是权限之类的问题,得具体问题具体分析

狗神,推荐个用system()执行脚本的开源tweak,我去看看

因素很多啊,可以一步步检查
1.你要执行的脚本文件到设备上了有没有执行权限
2.你的tweak中的system有没有执行字段脚本的权限
3.system是怎么传参调用脚本的,可能是路径错了

还有就是问题可以尽量多描述下你是怎么操作的!

好,谢iCyber

  1. 脚本有执行权限 +x了,脚本通过command line执行是正常的
  2. 你说的system()有没有权限这个不是很懂,请指教
  3. system(“myshell.sh arg1 arg2”) 我是这么调用的

system()有没有权限很好理解:
在SpringBoard内部执行
system("reboot");
就会失败,因为这个命令必须以root身份执行

那我的tweak是注入到Evernote的,不是root身份;那怎么来使用root身份调用system()呢

第3个问题来了, myshell.sh保存在什么地方在呢? 你这就调用会在系统注册的环境变量找你这段脚本,例如/usr/bin 路径下等等! 很有可能是你的脚本路径问题!例如: ~sh$ ./test.sh 这样的命令

脚本路径我使用的绝对路径,脚本放到/var/root/ 和Evenote沙河路径下,我都试过了;是不是狗神所说的需要用root身份来执行system()呢,那怎么办

注入到Evernote里就不能调用需要以root权限执行的命令,只能通过进程间通信的方式,让tweak通知另一个具有root权限的进程(例如一个daemon)来执行命令

哦,我看下哪些进程有root权限。谢狗神

我用了一个有root权限的daemon去调用system()函数,但是脚本好像还是没有执行,这会是什么原因呢

你执行的是什么命令?
你执行
system(“reboot”);
看看iOS会不会重启,如果会的话,就可能是你命令本身的问题

恩,我在脚本里写了一句reboot,执行后设备重启了。怎么将脚本的输出重定向下?我调试下脚本是出了什么问题,在terminal里面运行脚本都是可以正常工作的,奇怪

用大于号或者两个大于号,

ls > /var/log/syslog

ls >> /var/log/syslog

我脚本里面使用git push一篇文章,commit的时候没有执行成功,git add没有报错。在命令行下执行这段脚本没有问题。

git add “${BLOG_PATH}”
if [ “$?” != 0 ]; then
echo “GIT error:add post fail…”
exit 5
fi

git commit -m “new posts:$2”
if [ “$?” != 0 ]; then
echo “GIT error:commit post fail…”
exit 6
fi

env GIT_SSL_NO_VERIFY=true git push origin master
if [ “$?” != 0 ]; then
echo “GIT error:push post fail…”
exit 7
fi
echo “push finished!”

system()

执行的命令里如果带分号(;),貌似是需要特殊处理的,你查查看

看错了把, 没有分号。这是command line的执行过程,很正常

这是你脚本里的一句吗?这个地方有分号