繁体   English   中英

仅当通过Java应用程序打开终端时,符号查找错误

[英]Symbol lookup error only when terminal opened through a java application

我写了一个bash脚本。 举个例子,一个很简单的例子是:

#!/bin/bash
gnuplot -e "set terminal pdf; set output'/tmp/test.pdf'; plot [-10:10] sin(x);"

该脚本的名称应为test.sh。 我可以通过外壳执行此脚本,并创建test.pdf。 如果我通过通过ProcessBuilder调用此脚本的Java应用程序执行此脚本,则不会创建pdf。 访问该脚本,并打开其他程序,如gedit。 AWK等的作品。 gnuplot似乎只是一个问题。

有谁知道这是为什么,我该如何解决?

Java代码是:

String command = "/tmp/test.sh";

try {
  ProcessBuilder pb = new ProcessBuilder("/bin/bash","-c",command);
  pb.start();
}catch (IOExeption e1) {
  e1.printStackTrace()
}

-更新-

似乎还有另一个问题。 感谢ccarton和muzido,如果java-jar文件是通过shell执行的,则gnuplot脚本得以执行。 如果将其嵌入到另一个看起来像execute_jar.sh这样简化的外壳中:

#!/bin/bash
java -jar test.jar

这个execute_jar.sh由另一个Java应用程序执行,该Java应用程序只能执行shell脚本,并且我无法修改。 此父应用程序有问题吗? 还是有可能的解决方法? gnuplot脚本必须通过我的test.jar执行,因为其他参数是在jar中生成并提供给脚本的。

-更新2-

因此,我一直在搜索更多内容并进行测试,我更改了test.jar使其不执行test.sh,而仅使用“ xterm”打开了一个外壳。 然后,我在这里手动键入脚本,并得到错误"gnuplot: symbol lookup error: /usr/lib64/libQtSvg.so.4: undefined symbol"什么想法吗?

-更新3-

我坚信这是一个库问题,因为存在“ /usr/lib64/libQtSvg.so.4”。 所以我尝试export LD_LIBRARY:$LD_LIBRARY:/usr/lib64但仍然是相同的错误。

-更新4-

我改变了标题

添加到行尾。

#!/bin/bash
gnuplot -e "set terminal pdf; set output'/tmp/test.pdf'; plot [-10:10] sin(x);"

到可执行文件;

chmod +x /tmp/test.sh

这是java代码; 运行此命令时,将在/ tmp /中创建test.pdf。

public class RunShellScript
{
    public static void main(String[] args)
    {
           String command = "/tmp/test.sh";
            try{
                    ProcessBuilder pb = new ProcessBuilder("/bin/bash","-c",command);
                    Process p = pb.start();
                    p.waitFor();
                    int shellExitStatus = p.exitValue();
                    System.out.println(shellExitStatus);
            }catch(Exception e){
                    e.printStackTrace();
            }
    }
}

运行此命令时,java控制台输出是什么?

脚本实际上不是可执行文件。 shebang( #! )由您的命令解释程序解释。 ProcessBuilder不会那样做。 要从Java运行此程序,您需要直接执行/ bin / bash并将此脚本作为命令行参数传递。

例:

ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c", "test.sh");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM