gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:16:19 33 4
gpt4 key购买 nike

当我在命令行上执行以下命令时,它会显示 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);
}

}

}

编辑我按照 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

关于java - 从 Java 执行时 shell 命令执行失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18081080/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com