从 Java 执行时 shell 命令执行失败

2023-12-27

当我在命令行上执行以下命令时,它会显示 sybase 数据库中的所有存储过程和表。

printf 'sp_help\ngo\n' | isql -Uxx -Pxxxx -Dxxxxx

但是当我在java中做同样的事情时。这不会返回任何结果。 谁能告诉我下面的代码有什么问题:

public class test
{
  public static void main(String[] args)
  {
   String cmd = "printf "+"\'sp_help\ngo\n\'"+"| isql -Uxx -Pxxxx -Dxxxxx" ;
   try{ 
          Process p;
          p = Runtime.getRuntime().exec(cmd);
          p.waitFor();
          String line; 
          BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

           while ((line = reader.readLine())!=null){
           System.out.println("Row is :" + line);
   } catch(Exception e)
       {
           System.out.println("Exception Caught : " + e);
       }

  }

}

EDIT我按照 Darkdust 的建议执行了它,但仍然不起作用。

try{
          Process p;
          p = Runtime.getRuntime().exec("sh -c \'printf \"sp_help\ngo\n\" | isql -Uxx -Pxxxxx -Dxxxxxx\'");
          p.waitFor();
          String line;
          BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

           while ((line = reader.readLine())!=null){
           System.out.println("Row is :" + line);
  }
 }
       catch(Exception e)
       {
           System.out.println("Exception Caught : " + e);
       }

但是命令:

sh -c 'printf "sp_help\ngo\n" | isql -Usa -Psybase11 -Dcnadb'

在命令行上工作。

我也尝试过:

p = Runtime.getRuntime().exec(new String[]{"sh","-c","\'printf \"sp_help\ngo\n\"","|isql -Uxx -Pxxxxx -Dxxxxx\'"});

但没有成功。


我想到了几件事:

  • PATH 环境变量不完整(因此isql找不到)。
  • 如果这是您提供的命令,您可能需要确保您位于正确的工作目录中,而不是弄乱 PATH 并调用./isql反而。
  • 由于您使用的是管道,因此您应该让 shell 执行此操作,如下所示sh -c "foo | bar"。否则| isql ...部分作为参数传递给printf以及。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Java 执行时 shell 命令执行失败 的相关文章

随机推荐