【问题标题】:Send multiple shell commands with app使用 app 发送多个 shell 命令
【发布时间】:2012-09-20 00:47:11
【问题描述】:

好的,我正在学习 shell 命令的工作原理,所以我决定开发一个应用程序来发送命令。这就是我得到的。

moveDirectory.setOnClickListener(new OnClickListener(){
    public void onClick(View v)
    {
        try{
            Process send = Runtime.getRunetime().exec(new String[] {"cd /sdcard/music/", "cp pic1 /sdcard/pic1"});
            send.waitFor();
        } catch (Exception ex){
            String toast = null;
            Log.i(toast, "Couldn't copy file", ex);
            }
        }
    });

但它不工作,第一个命令工作,但不是第二个。我应该添加什么?

谢谢

编辑:忘记添加 send.waitFor();线

【问题讨论】:

  • 您是否拥有成功创建这些目录的所有权限?
  • 不知道我需要权限,我需要哪些权限?如果是权限问题,为什么将目录更改为/sdcard/music/,但不复制文件?

标签: java android shell command


【解决方案1】:

使用普通命令分隔符;

moveDirectory.setOnClickListener(new OnClickListener(){
    public void onClick(View v)
    {
        try{
            Process send = Runtime.getRunetime().exec(new String[] {"cd /sdcard/music/ ; cp pic1 /sdcard/pic1"});
        } catch (Exception ex){
            String toast = null;
            Log.i(toast, "Couldn't copy file", ex);
            }
        }
    });

在此代码中,您
1) 去/sdcard/music
2)从/sdcard/musicpic1复制到/sdcard/pic1

【讨论】:

  • 天啊,简直不敢相信它是如此简单......非常感谢你成功了,最后一个问题:我可以随心所欲地添加吗?
  • 是的,但都必须与 ; - 象征。还有更多关于 bash 你可以在这里找到gnu.org/software/bash/manual/bashref.html
  • 很棒的链接,这会让我读几天。非常感谢!
【解决方案2】:

我在推测,但您可能误解了 exec 的参数到底是什么。它不是要执行的命令列表(实际上是批处理/shell 脚本),而是带有要由 shell 执行的参数的单个命令。像 Pepelac 建议的那样使其成为单行命令,或者将一系列命令放入稍后使用 exec 执行的单个文件中,这可能是您想要的。对于您尝试执行的命令,绝对没有理由不能使其成为包含完整源路径的单线(而不是更改为它),但可能还有其他原因需要您这样做你没有提到。

【讨论】: