using jshell in executable UNIX scripts

Brian Goetz brian.goetz at oracle.com
Tue Oct 11 19:52:10 UTC 2016


I understand why you'd like to coopt jshell into this -- after all, it 
is convenient and it seems "so close" -- but this is trying to turn 
jshell into something it wasn't designed for.  But this wasn't an 
oversight; we deliberately chose to leave this *outside* of the jshell 
requirements, because it feels like an entirely different feature.

More generally, "hacks" like this always come back to bite you. What you 
want is a "no main, no compile java runner".  Jshell looks like that, 
but it isn't.  When you have nothing, a little of something seems like a 
really good idea; but the warts will become apparent almost 
immediately.  I'd much rather do nothing for this now, and consider 
doing something better in the future, than doing something bad now -- 
which is what this would be.


On 10/10/2016 9:55 AM, Peter Levart wrote:
> Hi,
>
> "jshell" command is a very nice interactive Java shell, but it could 
> also be used for scripting. An executable script in any major UNIX OS 
> is a textual file with executable permissions that starts with the 
> following two characters: #!
> The rest of the 1st line is the path to the interpreter executable and 
> any arguments passed to it. The last argument passed to the 
> interpreter is the path to the executable script. In case of jshell, 
> one would want such script to be written like:
>
> #!/home/peter/Apps64/jdk9/bin/jshell
>
> System.out.println("Hello World!");
>
> /exit
>
>
> The problem is that jshell tries to parse the 1st line using jshell 
> syntax and the result of running above executable script is:
>
> | Error:
> |  illegal character: '#'
> | #!/home/peter/Apps64/jdk9/bin/jshell
> |  ^
> |  Error:
> |  illegal start of expression
> |  #!/home/peter/Apps64/jdk9/bin/jshell
> |    ^
> Hello World!
>
>
> The script is actually executed, but the syntax error encountered in 
> the 1st line is printed too.
>
> Would it be possible for jshell to skip 1st line if it starts with 
> characters #! like other shells do?
>
>
> Regards, Peter
>



More information about the kulla-dev mailing list