我正在使用Java运行sh文件。
但是,问题是在为Eclipse执行sh文件时如何将Java变量放入sh变量中。
我正在使用日食。
这是我的代码
test.sh
#!/bin/sh
docker run -it --name $1 ubuntu:16.04
exit 0
在Java中
public static void makeContainer() throws Exception {
//String makecontainer = "/usr/local/bin/docker run --name "+fileName+" ubuntu:16.04";
String[] command = { "/bin/sh","/Users/keomgong1/Desktop/test.sh", fileName };
Process process = Runtime.getRuntime().exec(command);
process.getInputStream();
InputStream is = process.getInputStream();
BufferedReader bf = new BufferedReader(new InputStreamReader(is));
}
我想要$ 1作为文件名,但是它没有按预期运行。
文件名是Java字符串索引。
怎么了?
我该怎么办?
答案 0 :(得分:2)
脚本名称之后的第一个参数是程序名称($0
),而不是第一个位置参数($1
)。
您可以为$0
添加一个虚拟文件名,然后下一个参数将为$1
:
String[] command = { "/bin/sh","/Users/keomgong1/Desktop/test.sh", "_", fileName };
但是,最好直接运行脚本而不是使用/bin/sh
:
String[] command = { "/Users/keomgong1/Desktop/test.sh", fileName };
这需要test.sh
有一个Shebang(第一行是#!/bin/sh
)并具有执行权限(chmod +x /Users/keomgong1/Desktop/test.sh
)。