我愿意将参数传递给jshell脚本.例如,我会喜欢这样的事情:
jshell myscript.jsh "some text"
Run Code Online (Sandbox Code Playgroud)
然后在脚本中的某个变量中提供字符串"some text".
但是,jshell只需要一个文件列表,因此答案是:
File 'some text' for 'jshell' is not found.
Run Code Online (Sandbox Code Playgroud)
有没有办法将参数正确传递给jshell脚本?
到目前为止,我唯一的解决方案是在调用脚本时使用环境变量:
ARG="some test" jshell myscript.jsh
Run Code Online (Sandbox Code Playgroud)
然后我可以在脚本中访问它:
System.getenv().get("ARG")
Run Code Online (Sandbox Code Playgroud)
选项怎么样? -R
> jshell -v -R-Da=b ./file.jsh
Run Code Online (Sandbox Code Playgroud)
用于脚本
{
String value = System.getProperty("a");
System.out.println("a="+value);
}
/exit
Run Code Online (Sandbox Code Playgroud)
会给你
> jshell -v -R-Da=b ./file.jsh
a=b
Run Code Online (Sandbox Code Playgroud)
另一种方式,将遵循:
{
class A {
public void main(String args[])
{
for(String arg : args) {
System.out.println(arg);
}
}
}
new A().main(System.getProperty("args").split(" "));
}
Run Code Online (Sandbox Code Playgroud)
和执行
> jshell -R-Dargs="aaa bbb ccc" ./file_2.jsh
Run Code Online (Sandbox Code Playgroud)
更新
以前的解决方案将失败,更复杂的args.例如'This is my arg'.
但我们可以从中受益,ant而且它也是CommandLine阶级
import org.apache.tools.ant.types.Commandline;
{
class A {
public void main(String args[])
{
for(String arg : args) {
System.out.println(arg);
}
}
}
new A().main(Commandline.translateCommandline(System.getProperty("args")));
}
Run Code Online (Sandbox Code Playgroud)
然后,我们可以这样称呼它:
jshell --class-path ./ant.jar -R-Dargs="aaa 'Some args with spaces' bbb ccc" ./file_2.jsh
aaa
Some args with spaces
bbb
ccc
Run Code Online (Sandbox Code Playgroud)
当然,ant.jar必须在通过的路径中--class-path
| 归档时间: |
|
| 查看次数: |
956 次 |
| 最近记录: |