6 – Lua Stand-alone

    The options are:

    • -e *stat*: executes string stat;
    • -l *mod*: “requires” mod;
    • -i: enters interactive mode after running script;
    • --: stops handling options;
    • -: executes stdin as a file and stops handling options.

    After handling its options, lua runs the given script, passing to it the given args as string arguments. When called without arguments, lua behaves as lua -v -i when the standard input (stdin) is a terminal, and as lua - otherwise.

    Before running any argument, the interpreter checks for an environment variable . If its format is @*filename*, then lua executes the file. Otherwise, lua executes the string itself.

    All options are handled in order, except -i. For instance, an invocation like

    1. $ lua -e'a=1' -e 'print(a)' script.lua

    Before starting to run the script, lua collects all arguments in the command line in a global table called arg. The script name is stored at 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 the options) go to negative indices. For instance, in the call

    the interpreter first runs the file a.lua, then creates a table

    1. [0] = "b.lua",
    2. [1] = "t1", [2] = "t2" }

    and finally runs the file . The script is called with arg[1], arg[2], ··· as arguments; it can also access these arguments with the vararg expression ‘...‘.

    In interactive mode, if you write an incomplete statement, the interpreter waits for its completion by issuing a different prompt.

    (The outer pair of quotes is for the shell, the inner pair is for Lua.) Note the use of -i to enter interactive mode; otherwise, the program would just end silently right after the assignment to _PROMPT.

    To allow the use of Lua as a script interpreter in Unix systems, the stand-alone 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

    1. #!/usr/local/bin/lua

    (Of course, the location of the Lua interpreter may be different in your machine. If lua is in your , then

    is a more portable solution.)