using jshell in executable UNIX scripts
Sundararajan Athijegannathan
sundararajan.athijegannathan at oracle.com
Wed Oct 12 02:29:50 UTC 2016
There is another shell in jdk (since jdk8) called "jjs". jjs supports
shebang scripts, backquote exec, heredocs, calls to Java code etc:
https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/shell.html
-Sundar
On 10/12/2016 1:22 AM, Brian Goetz wrote:
> 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