我正在尝试从Android应用程序执行shell脚本。
首先,我尝试从Java运行Shell脚本,它适用于所有命令
例如pwd
,cd
,netstat
。移动文件,复制文件。
我已经从Android应用程序尝试了它,我得到了cd
,pwd
,netstat
的输出以及脚本中的echo语句,但是用于移动和复制文件无效。
当这些命令在adb shell中正常工作时,是否需要从脚本文件执行这些命令的任何权限?
我的代码看起来像这样:
void execCommandLine()
{
//***********************
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("ls -all");
proc = rt.exec("sh /data/shTest.sh");
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (Throwable t)
{
t.printStackTrace();
}
我的脚本文件如下:
#!/bin/sh
echo "Knowledge is Power"
echo "I am a script"
echo $PATH
netstat
pwd
cd /data
pwd
cd /system/bin
pwd
mv /data/local/hello.txt /data/
cp /data/local/hello1.txt /data/
cd /data/local/tmp
cd /system/bin
只有cp
和mv
命令未显示预期结果。
请给我一些指导。
我正在尝试并将其测试到Emulator中。在/ system / bin有mv commond我也尝试过busybox但我没有得到预期的结果。对于root privilage如何继续......给出一些想法继续。
答案 0 :(得分:4)
mv
和cp
都让我在android shell中遇到麻烦。许多其他人使用cat x > y
或类似的结果。
答案 1 :(得分:1)
有关可能发生在您身上的事情的一些提示。 你有根电话吗?你在/ system / bin中有命令mv和cp吗? 最后,您可以尝试使用busybox,如果您的手机有。 也许您应该首先请求root权限才能执行此操作...
答案 2 :(得分:1)
斯威尼已经给你一个解决方案,但这是一个解释。
Android不是GNU Linux,因此默认情况下cp
和mv
非常不同。在Android上,他们只管理硬链接,例如,如果您尝试跨分区移动文件,它将使您的数据消失,因为它不会将数据从分区移动到分区,只需调整硬链接。
使用busybox或创建cp
和mv
脚本,如果您无法更改脚本,那么cat file > otherfile
和mv a rm file
是必须的,但最好更改脚本,因为它使它们可以移植到没有黑客的系统。
答案 3 :(得分:0)
我使用的解决方案是一个符号链接。例如,如果在/ system / bin中不存在命令,如cp,grep或mv命令,那么busybox中肯定存在。
为此,我只使用命令(来自终端仿真器)重新安装/系统作为RW,而不是创建符号链接
su
mount -o rw,remount /system
cd /system/bin
ln -s busybox cp # cp or other command