我使用system()方法执行一段脚本,但是没有起到作用,脚本没有执行?请问大家是怎么在tweak中执行一段脚本的,这里有哪些需要注意的问题?
执行一段脚本的话就用system()
即可,没起作用的原因可能是权限之类的问题,得具体问题具体分析
狗神,推荐个用system()执行脚本的开源tweak,我去看看
因素很多啊,可以一步步检查
1.你要执行的脚本文件到设备上了有没有执行权限
2.你的tweak中的system有没有执行字段脚本的权限
3.system是怎么传参调用脚本的,可能是路径错了
还有就是问题可以尽量多描述下你是怎么操作的!
好,谢iCyber
- 脚本有执行权限 +x了,脚本通过command line执行是正常的
- 你说的system()有没有权限这个不是很懂,请指教
- 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的执行过程,很正常
这是你脚本里的一句吗?这个地方有分号