7 – Lua Standalone
The options are:
-e *stat*
: executes string stat;-l *mod*
: “requires” mod and assigns the result to global @mod;-i
: enters interactive mode after running script;-E
: ignores environment variables;--
: stops handling options;-
: executesstdin
as a file and stops handling options.
After handling its options, lua
runs the given script. When called without arguments, lua
behaves as lua -v -i
when the standard input (stdin
) is a terminal, and as lua -
otherwise.
When called without option -E
, the interpreter checks for an environment variable LUA_INIT_5_3
(or if the versioned name is not defined) before running any argument. If the variable content has the format @*filename*
, then lua
executes the file. Otherwise, lua
executes the string itself.
When called with option -E
, besides ignoring LUA_INIT
, Lua also ignores the values of LUA_PATH
and LUA_CPATH
, setting the values of package.path
and with the default paths defined in luaconf.h
.
All options are handled in order, except -i
and -E
. For instance, an invocation like
Before running any code, lua
collects all command-line arguments in a global table called arg
. The script name goes to index 0, the first argument after the script name goes to index 1, and so on. Any arguments before the script name (that is, the interpreter name plus its options) go to negative indices. For instance, in the call
the table is like this:
- arg = { [-2] = "lua", [-1] = "-la",
- [0] = "b.lua",
- [1] = "t1", [2] = "t2" }
If there is no script in the call, the interpreter name goes to index 0, followed by the other arguments. For instance, the call
will print “-e
“. If there is a script, the script is called with arguments arg[1]
, ···, arg[#arg]
. (Like all chunks in Lua, the script is compiled as a vararg function.)
In interactive mode, Lua repeatedly prompts and waits for a line. After reading a line, Lua first try to interpret the line as an expression. If it succeeds, it prints its value. Otherwise, it interprets the line as a statement. If you write an incomplete statement, the interpreter waits for its completion by issuing a different prompt.
In case of unprotected errors in the script, the interpreter reports the error to the standard error stream. If the error object is not a string but has a metamethod __tostring
, the interpreter calls this metamethod to produce the final message. Otherwise, the interpreter converts the error object to a string and adds a stack traceback to it.
When finishing normally, the interpreter closes its main Lua state (see lua_close
). The script can avoid this step by calling to terminate.
To allow the use of Lua as a script interpreter in Unix systems, the standalone interpreter skips the first line of a chunk if it starts with #
. Therefore, Lua scripts can be made into executable programs by using chmod +x
and the #!
form, as in
(Of course, the location of the Lua interpreter may be different in your machine. If lua
is in your PATH
, then
is a more portable solution.)