." Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.
." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
."
." This code is free software; you can redistribute it and/or modify it
." under the terms of the GNU General Public License version 2 only, as
." published by the Free Software Foundation.
."
." This code is distributed in the hope that it will be useful, but WITHOUT
." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
." FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
." version 2 for more details (a copy is included in the LICENSE file that
." accompanied this code).
."
." You should have received a copy of the GNU General Public License version
." 2 along with this work; if not, write to the Free Software Foundation,
." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
."
." Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
." or visit www.oracle.com if you need additional information or have any
." questions.
."
.TH jrunscript 1 "04 May 2009"
." Generated from HTML by html2man (author: Eric Armstrong)

.LP
.SH "Name"
jrunscript \- command line script shell
.LP
.SH "SYNOPSIS"
.LP

.LP
.nf
\f3
.fl
\fP\f3jrunscript\fP [ \f2options\fP ] [ arguments... ]
.fl
.fi

.LP
.SH "PARAMETERS"
.LP

.LP
.RS 3
.TP 3
options 
Options, if used, should follow immediately after the command name. 
.TP 3
arguments 
Arguments, if used, should follow immediately after options or command name. 
.RE

.LP
.SH "DESCRIPTION"
.LP

.LP
.LP
\f3jrunscript\fP is a command line script shell. jrunscript supports both an interactive (read\-eval\-print) mode and a batch (\-f option) mode of script execution. This is a scripting language independent shell. By default, JavaScript is the language used, but the \-l option can be used to specify a different language. Through Java to scripting language communication, jrunscript supports "exploratory programming" style.
.LP
.LP
\f3NOTE:\fP This tool is \f3experimental\fP and may \f3not\fP be available in future versions of the JDK.
.LP
.SH "OPTIONS"
.LP

.LP
.RS 3
.TP 3
\-classpath path 
Specify where to find the user's .class files that are accessed by the script. 
.TP 3
\-cp path 
This is a synonym for \-classpath \f2path\fP 
.TP 3
\-Dname=value 
Set a Java system property. 
.TP 3
\-J<flag> 
Pass <flag> directly to the Java virtual machine on which jrunscript is run. 
.TP 3
\-l language 
Use the specified scripting language. By default, JavaScript is used. Note that to use other scripting languages, you also need to specify the corresponding script engine's jar file using \-cp or \-classpath option. 
.TP 3
\-e script 
Evaluate the given script. This option can be used to run "one liner" scripts specified completely on the command line. 
.TP 3
\-encoding encoding 
Specify the character encoding used while reading script files. 
.TP 3
\-f script\-file 
Evaluate the given script file (batch mode). 
.TP 3
\-f \- 
Read and evaluate a script from standard input (interactive mode). 
.TP 3
\-help\  
Output help message and exit. 
.TP 3
\-?\  
Output help message and exit. 
.TP 3
\-q\  
List all script engines available and exit. 
.RE

.LP
.SH "ARGUMENTS"
.LP
.LP
If [arguments...] are present and if no \f3\-e\fP or \f3\-f\fP option is used, then the first argument is the script file and the rest of the arguments, if any, are passed as script arguments. If [arguments..] and \f3\-e\fP or \f3\-f\fP option are used, then all [arguments..] are passed as script arguments. If [arguments..], \f3\-e\fP and \f3\-f\fP are missing, interactive mode is used. Script arguments are available to a script in an engine variable named "arguments" of type String array.
.LP
.SH "EXAMPLES"
.LP
\f3Executing inline scripts\fP
.LP
.RS 3

.LP
.nf
\f3
.fl
jrunscript \-e "print('hello world')"
.fl
jrunscript \-e "cat('http://java.sun.com')"
.fl
\fP
.fi
.RE

.LP
\f3Use specified language and evaluate given script file\fP
.LP
.RS 3

.LP
.nf
\f3
.fl
jrunscript \-l js \-f test.js
.fl
\fP
.fi
.RE

.LP
\f3Interactive mode\fP
.LP
.RS 3

.LP
.nf
\f3
.fl
jrunscript
.fl
js>print('hello world');
.fl
hello world
.fl
js>34 + 55
.fl
89
.fl
js> thread(function() { print('hello world'); }
.fl
hello world
.fl
js>
.fl
\fP
.fi
.RE

.LP
\f3Run script file with script arguments\fP
.LP
.RS 3

.LP
.nf
\f3
.fl
jrunscript test.js arg1 arg2 arg3
.fl
\fP
.fi
.RE

.LP
test.js is script file to execute and arg1, arg2 and arg3 are passed to script as script arguments. Script can access these using "arguments" array.  
.SH "SEE ALSO"
.LP
.LP
If JavaScript is used, then before evaluating any user defined script, jrunscript initializes certain built\-in functions and objects. These JavaScript built\-ins are documented in jsdocs.
.LP

.LP
 
