Java 如何将参数传递给shell脚本以用作变量文件名的一部分
我试图通过编程方式从java程序调用一个shell脚本,该脚本根据发送的参数执行命令 要在connectvpn.sh 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程序能够始终使
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));