java代码如下:String[] cmd = new String[]{"/home/a/linuxshell.sh"};
Process ps = Runtime.getRuntime().exec(cmd);
BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
StringBuffer sb = new StringBuffer("正常信息:");
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
br.close();
sb.append("\n错误信息:");
br = new BufferedReader(new InputStreamReader(ps.getErrorStream()));
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
br.close();
        System.out.println(sb.toString());
shell#!/bin/bash
cd /home/a
dir这时出现错误信息了,不是java错误,是linuxshell系统出来的错误
打印了:错误信息:/home/a/linuxshell.sh: line 2: dir: No such file or directory但如果在linuxshell中运行的话 没有任何问题。

解决方案 »

  1.   

    但是我在linux中运行shell文件 是没问题的,java中调用就会有问题,并且。我用java运行shell的时候
    echo "$USER"  发现就是当前登陆用户
      

  2.   

    可能是我表达的不够明白,我重新说一下,错误信息是linuxshell.sh报出的,不是java报出来的
    并不是说java找不到linuxshell.sh这个文件。 而是java调用了linuxshell.sh后 sh执行到第2行
    提示找不到文件或目录。 请问一下各位 java调用shell的时候 默认是在哪个路径呢?我cd到/home/a这个路径,肯定是没问题的,但是dir就出问题了。这太奇怪了。
    难道java调用shell 还跟权限什么的有关吗?可是我在linux中直接调用linuxshell.sh文件是可以执行的,java调用就不行了,并且java调用时,我还echo "$USER" 发现就是当前登陆用户,操作文件 执行文件等权限,肯定是拥有的。再说 dir根本就没什么权限要求啊。且报的也不是权限的错。而是路径问题。纠结啊。。
      

  3.   


    #!/bin/bash
    cd /home/a/
    dir
      

  4.   

    貌似是执行了 cd dir 的命令......
      

  5.   

    脚本命令是需要通过shell进行加载的
    你直接执行sh文件,可以通过解释吗?
    应该通过runtime执行sh 或者 bash
    然后给这个process的输出流写入"/home/a/linuxshell.sh\n"