gpt4 book ai didi

java - 将变量从 Java 传递到 Shell 脚本

转载 作者:行者123 更新时间:2023-12-01 12:55:52 28 4
gpt4 key购买 nike

我正在尝试从 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();
}

}

shell 代码:

#!/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');"&

我还在脚本末尾添加了一个 echo 来查看变量是否正确传递,看起来确实如此。第一个命令(SPARQL 命令)似乎可以工作,因为图形确实已创建,但第二个命令未正确处理。

最佳答案

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

ProcessBuilder(String... command)

你必须像这样传递参数:

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

脚本内 param1 为 $1 ,param2 为 $2 ,param3 为 $3 (您可以在构造函数中传递任意数量的参数)

关于java - 将变量从 Java 传递到 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23906717/

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