繁体   English   中英

将变量从Java传递到Shell脚本

[英]Pass a variable from Java to a Shell script

我正在尝试从Java代码运行Shell脚本。 目前,我正在脚本中手动提供数据,但是我希望能够从运行脚本的Java代码中提供变量。

这是Java代码和脚本:

public static void main(String[] args) {

          try {
            ProcessBuilder pb = new ProcessBuilder(
              "/home/najib/upload.sh");
            Process p = pb.start();    
            p.waitFor();              
            System.out.println("Script executed successfully");
          } catch (Exception e) {
            e.printStackTrace();
          }

    }

外壳代码:

#!/bin/bash
/usr/local/virtuoso-opensource/bin/isql 1111 dba dba exec="set AUTOCOMMIT MANUAL;"&
/usr/local/virtuoso-opensource/bin/isql 1111 dba dba exec="delete from DB.DBA.load_list;"&
/usr/local/virtuoso-opensource/bin/isql 1111 dba dba exec="SPARQL CREATE GRAPH <VAR1>;"&
/usr/local/virtuoso-opensource/bin/isql 1111 dba dba exec="ld_dir('/home/najib', 'VAR2', 'VAR1');"&
wait
/usr/local/virtuoso-opensource/bin/isql 1111 dba dba exec="rdf_loader_run();"

我想知道如何将变量放在Java代码中,以及如何在运行时调用它!

编辑:根据提供的解决方案,我将脚本更改为此:

/usr/local/virtuoso-opensource/bin/isql 1111 dba dba exec="SPARQL CREATE GRAPH <$2>;"&
/usr/local/virtuoso-opensource/bin/isql 1111 dba dba exec="ld_dir('/home/najib', '$1', '$2');"&

我还在脚本的末尾添加了回显,以查看变量是否正确传递,而且看起来正确。 当确实创建了图形时,第一个命令(SPARQL一个)似乎起作用,但是第二个命令未正确处理。

您可以将参数传递给您的shell脚本,并在de script中使用它们。Class ProcessBuilder具有一个构造函数,该构造函数接受要执行的命令,并将参数列表传递给可执行文件:

ProcessBuilder(String... command)

您必须通过这样的参数:

 ProcessBuilder pb = new ProcessBuilder("/home/najib/upload.sh",param1,param2,param3);

在脚本中,param1是$ 1,param2是$ 2,param3是$ 3(您可以根据需要在构造函数中传递尽可能多的参数)

在脚本中使用外壳变量,通过环境在Java中进行设置:

import java.util.Map;

class so1 {

    public static void main(String[] args) {

        try {
            ProcessBuilder pb = new ProcessBuilder("/home/...sh");
            Map<String, String> env = pb.environment();
            env.put("VAR1", "something");
            Process p = pb.start();    
            p.waitFor();              
            System.out.println("Script executed successfully");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

在脚本中:

/usr/local/virtuoso-opensource/bin/isql 1111 dba dba exec="SPARQL CREATE GRAPH $VAR1;"&

暂无
暂无

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

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