鉴于Java 9已经出现在我们身上,我们终于可以拥有一个java REPL了,jshell我希望有一种方法可以将一个shebang添加到脚本中并对其进行jshell解释.
我尝试创建test.jsh:
#!/usr/bin/env jshell -s
System.out.println("Hello World")
/exit
Run Code Online (Sandbox Code Playgroud)
然而,这给了:
? ./test.jsh
| Error:
| illegal character: '#'
| #!/usr/bin/env jshell -s
| ^
| Error:
| illegal start of expression
| #!/usr/bin/env jshell -s
| ^
Hello World
Run Code Online (Sandbox Code Playgroud)
事实证明,在OpenJDK https://bugs.openjdk.java.net/browse/JDK-8167440中有一个增强请求.
有没有其他方法可以做到这一点?
从帮助信息:
-J<flag> Pass <flag> directly to the runtime system.
Use one -J for each runtime flag or flag argument
-R<flag> Pass <flag> to the remote runtime system.
Use one -R for each remote flag or flag argument
Run Code Online (Sandbox Code Playgroud)
我在工具文档和jshell用户指南中都找不到解释.
另外,什么是jshell上下文中的"远程运行时系统"?
如何在jshell 脚本中获取用户输入?或者我做错了什么?
注意:我不是在寻找如何将参数传递给 jshell script。
例如脚本hello.java:
Scanner in = new Scanner(System.in);
System.out.print("Enter number n1: ");
int n1 = in.nextInt();
System.out.print("Enter number n2: ");
int n2 = in.nextInt();
System.out.println("n1 + n2 = "+ (n1 +n2));
/exit
Run Code Online (Sandbox Code Playgroud)
如果我在 jshell 中逐行输入它可以工作,但然后我运行jshell hello.java它就不行了。投掷java.util.NoSuchElementException。
我得到的输出:
@myMint ~/Java $ jshell hello.java
Enter number n1: | java.util.NoSuchElementException thrown:
| at Scanner.throwFor (Scanner.java:858)
| at Scanner.next (Scanner.java:1497)
| at Scanner.nextInt (Scanner.java:2161)
| at …Run Code Online (Sandbox Code Playgroud)