Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将参数传递给shell脚本以用作变量文件名的一部分_Java_Bash_Shell - Fatal编程技术网

Java 如何将参数传递给shell脚本以用作变量文件名的一部分

Java 如何将参数传递给shell脚本以用作变量文件名的一部分,java,bash,shell,Java,Bash,Shell,我试图通过编程方式从java程序调用一个shell脚本,该脚本根据发送的参数执行命令 要在connectvpn.sh shell脚本中执行的命令是: echo myrootpassword | sudo -S /usr/local/Cellar/openvpn/2.3.8/sbin/openvpn --config /usr/local/etc/openvpn/1.opvn 或 依此类推,从一个长列表中,我想要的文件名编号是可变的,这取决于接收到的参数值 因此,我希望我的java程序能够始终使

我试图通过编程方式从java程序调用一个shell脚本,该脚本根据发送的参数执行命令

要在connectvpn.sh shell脚本中执行的命令是:

echo myrootpassword | sudo -S /usr/local/Cellar/openvpn/2.3.8/sbin/openvpn --config /usr/local/etc/openvpn/1.opvn

依此类推,从一个长列表中,我想要的文件名编号是可变的,这取决于接收到的参数值

因此,我希望我的java程序能够始终使用相同的shell脚本,但根据发送的参数使用不同的.ovpn文件

我相信在我的java程序中,我必须这样称呼它:

server_number = 1;    

ProcessBuilder pb = new ProcessBuilder("./connectvpn.sh", server_number);
Process proc = pb.start();
在shell脚本中,调用的文件名是变量,在示例中,它使用1,但在其他情况下,它使用作为参数发送的任何数字


多谢各位

在shell脚本中,使用
$1
表示传递给它的第一个参数

修复java,如下所示:

ProcessBuilder pb = new ProcessBuilder("./connectvpn.sh", String.valueOf(server_number));

好的,谢谢,但这并不能回答我关于参数的问题。你可以在数组列表中传递参数。List args=new ArrayList();args.add(“script.bat”);//命令名args.add(“-option”);//可选参数作为单独的列表项添加ProcessBuilder pb=new ProcessBuilder(参数);。如果我没弄错的话-您是在尝试向Java程序传递一个变量参数吗?您可以通过使用适当的参数调用Java程序的“main”类来实现这一点。请看,谢谢,所以在shell脚本中我会有:echo myrootpassword | sudo-S/usr/local/ceral/openvpn/2.3.8/sbin/openvpn--config/usr/local/etc/openvpn/$1.opvn?是的。试试看。我的java程序给了我这个错误,我必须先解决,所以如果你知道问题出在哪里,请告诉我:“错误消息是:class bsh.EvalError(第18行):new ProcessBuilder(“./connectvpn.sh”,服务器号)--源文件:内联计算:``//import java.io.IOException;//import java.util.*;import java.lang.ProcessBuil…'':类型化变量声明:构造函数错误:在类:java.lang.ProcessBuilder中找不到构造函数:java.lang.ProcessBuilder(java.lang.String,int)。第一次使用ProcessBuilder时,可能忘记了包含一些内容,因为错误显示,无法找到构造函数。您正在调用
ProcessBuilder(字符串,int)
。可接受的构造函数是
ProcessBuilder(列表)
ProcessBuilder(字符串…)
。检查我上面编辑的答案。
ProcessBuilder pb = new ProcessBuilder("./connectvpn.sh", String.valueOf(server_number));