JSexec may be used to execute some Synchronet JavaScript files (e.g. *.js
, *.ssjs
) externally from Synchronet.
A Synchronet installation is required for JSexec to function, though JSexec will execute scripts successfully even when Synchronet is not running.
usage: jsexec [-opts] [[path/]module[.js] [args] or: jsexec [-opts] -r js-expression [args] or: jsexec -v available opts: -r<expression> run (compile and execute) JavaScript expression -c<ctrl_dir> specify path to Synchronet CTRL directory -C do not change the current working directory (to CTRL dir) -d run in background (daemonize) -m<bytes> set maximum heap size (default=16777216 bytes) -t<limit> set time limit (default=864000, 0=unlimited) -y<interval> set yield interval (default=10000, 0=never) -g<interval> set garbage collection interval (default=100, 0=never) -h[hostname] use local or specified host name (instead of SCFG value) -u<mask> set file creation permissions mask (in octal) -L<level> set log level (default=6) -E<level> set error log level threshold (default=4) -i<path_list> set load() comma-sep search path list (default="load") -f use non-buffered stream for console messages -a append instead of overwriting message output files -A send all messages to stdout -A<filename> send all messages to file instead of stdout/stderr -e<filename> send error messages to file in addition to stderr -o<filename> send console messages to file instead of stdout -S<filename> send status messages to file instead of stderr -S send status messages to stdout -n send status messages to /dev/null instead of stderr -q send console messages to /dev/null instead of stdout -v display version details and exit -x disable auto-termination on local abort signal -l loop until intentionally terminated -p wait for keypress (pause) on exit -! wait for keypress (pause) on error -D load the script into an interactive debugger
The module
argument is optional if the standard input stream (stdin
) is not a console (tty
), allowing for shebang support on Unix-like operating systems.
Note:
When JSexec starts up, it changes its current working directory to the Synchronet ctrl
directory. If you pass filenames on the command-line to a module, the paths must be full/absolute paths or relative to the Synchronet ctrl
directory.
The log severity/output verbosity level can be controlled via the ctrl/jsexec.ini
file or specified using the -L
command-line option. The value following -L
can either be the numeric log level (7
being the lowest-severity / most verbose output) or a word describing the log level (e.g. -Ldebug
for debug-level logput).
Additional properties available to JavaScript scripts running from JSexec:
Property | Type | Description |
---|---|---|
jsexec_revision | string | CVS revision of JSexec (example: "1.135" ) |
jsexec_revision_detail | string | Verbose details about the JSexec build (example: "JSexec 1.136 Debug Compiled Mar 15 2010 11:13:53 with GCC 3.4.2" ) |
env | Object | Associative array of system environment variables (example: env["shell"]="/bin/bash" ) |
stdin | File | Standard input stream |
stdout | File | Standard output stream |
stderr | File | Standard error output stream |
The following global methods (functions) are also available to JavaScript scripts running from JSexec:
Function | Return Value | Description |
---|---|---|
log | String | Log a message |
read | String | Read from stdin |
readln | String | Read line from stdin |
write | String | Write a string to stdout |
print | String | Write a line to stdout (a.k.a. writeln ) |
printf | String | Write a formatted string to stdout |
alert | String | Print an alert message on the console |
prompt | String | Prompt for user input |
confirm | String | Get a yes/no confirmation |
deny | String | Get a no/yes confirmation |
chdir | String | Change the current working directory |
putenv | String | Add or change an environment variable |
JSexec includes an instance of a special Console Input/Output class called conio
.
JSexec includes an instance of a special User Interface class called uifc
.
See the UIFC reference page for more details.
JSexec for non-Windows platforms will ignore the first line of the interpreted script if it begins with #!
, allowing for a shebang (Unix) style script file where the first line of the script is something like:
#!/sbbs/exec/jsexec -c/sbbs/ctrl
This allows JSexec scripts to be executed easily via CGI as well as other command-line conveniences on Unix-like operating systems.
JSexec supports multiple output methods and streams:
stderr
)log()
messages with log-levels of LOG_ERR
or lowerstderr
)log()
messages with log-levels higher than LOG_ERR
stdout
)write()
writeln()
printf()
alert()
and prompt()
messages
When JSexec is executed on *nix operating systems with the -d
(Daemonize) option, all JS log()
messages are directed to syslog
.
-A
and -S
command-line options.-n
(Null) command-line option.-q
(Quiet) command-line option. stderr
and a specified filename via the -e
command-line option.