首页 文章

如何运行JShell文件?

提问于
浏览
9

我想用JShell运行整个文件,如:

$ jshell my-jshell-skript.java

例如我的 my-jshell-skript.java 的内容是 40 + 2; .

或者可选的可执行文件:

#!/usr/bin/jshell
40 + 2

现在这可能吗?还是我仍然需要采用Java-Main-Class的旧方法?

编辑1:Windows问题

在Windows上,我仍然没有解决方案:

C:\JDKs\jdk9.0.0.0_x64\bin>type foo.jsh
1 + 1

C:\JDKs\jdk9.0.0.0_x64\bin>jshell.exe foo.jsh
|  Welcome to JShell -- Version 9
|  For an introduction type: /help intro

jshell> /exit
|  Goodbye

C:\JDKs\jdk9.0.0.0_x64\bin>

JShell开始完全忽略我的文件 . 这是一个错误吗?

编辑2:解决Windows问题

原来这是我的foo的内容 . 好像 1 + 1 只能起作用"on the fly",而不是从文件中读取:

C:\JDKs\jdk9.0.0.0_x64\bin>type foo.jsh
System.out.println("foo");

C:\JDKs\jdk9.0.0.0_x64\bin>jshell.exe foo.jsh
foo
|  Welcome to JShell -- Version 9
|  For an introduction type: /help intro

jshell> /exit
|  Goodbye

C:\JDKs\jdk9.0.0.0_x64\bin>

5 回答

  • 2

    JShell 并不意味着直接运行Java类 . 如果你想运行一个java类,你仍然需要以旧的方式去做 - java <your-class-name> .

    来自docs

    Java Shell工具(JShell)是一个用于学习Java编程语言和Java代码原型的交互式工具 . JShell是一个Read-Evaluate-Print循环(REPL),它在输入时评估声明,语句和表达式,并立即显示结果 .

    根据这句话,JShell用于运行或尝试单个Java语句 . 在传统的java方式中,您必须先编写完整的Java程序,然后才能运行它并查看结果 . 但JShell允许您尝试Java语句,而无需构建完整的独立Java应用程序 .

    因此,对您的问题的简短回答是,不,您不能调用像 jshell my-jshell-skript.java 这样的独立Java应用程序 . 但是,您可以调用包含单个JShell命令或Java语句的脚本文件 . 因此,如果从Java程序复制所有语句并将其粘贴到JShell脚本,则可以运行以下脚本:

    % jshell my-jshell-skript.jsh

    但这与运行独立的Java应用程序并不完全相同 .

  • 6

    您可以使用这些语句创建名为Jshell scriptJshell script文件,并在命令提示符处运行 jshell ,执行它: -

    jshell /path/to/some.jsh
    

    在MacOSX上,我会做类似的事情:

  • 0

    在jshell中,您可以通过发出以下命令将当前片段保存到文件中:

    /save Filename
    

    同样,您可以通过发出以下命令将文件加载到当前上下文/会话中:

    /open Filename
    

    这是一个这样的例子:

    |  Welcome to JShell -- Version 9.0.7.1
    |  For an introduction type: /help intro
    
    jshell> String[] names={"nameone","nametwo"}
    names ==> String[2] { "nameone", "nametwo" }
    
    jshell> Arrays.toString(names);
    $2 ==> "[nameone, nametwo]"
    
    jshell> /save myExample
    
    jshell> %                                                                                                                                             sudipbhandari at sysadm-Latitude-5480 in ~                                                                                                      18:22
    > jshell
    |  Welcome to JShell -- Version 9.0.7.1
    |  For an introduction type: /help intro
    
    jshell> names
    |  Error:
    |  cannot find symbol
    |    symbol:   variable names
    |  names
    |  ^---^
    
    jshell> /open myExample
    
    jshell> names
    names ==> String[2] { "nameone", "nametwo" }
    
  • 1

    concise 反馈模式下启动 jshell 并过滤所需内容 -

    $echo '40 + 2' | jshell --feedback concise | sed -n '2p' |sed -En 's/[^>]*>(.+)/\1/gp'
    

    output: 42

    更多细节 - How to execute java jshell command as inline from shell or windows commandLine

  • 1

    您可以将字符串传递给JShell:

    echo 1 + 2 | jshell
    

    例:

    :/# echo 1 + 2 | jshell
    |  Welcome to JShell -- Version 9
    |  For an introduction type: /help intro
    
    jshell> 1 + 2
    $1 ==> 3
    
    :/#
    

    或者,从文件:

    cat myfile | jshell
    

    myfile 包含"1 + 2"行 .

相关问题