---
name: "lua50"
section: "1"
platform: "linux"
package: "lua50"
version: "5.0.3-8.1"
release: "Debian 11 (Bullseye)"
platforms: ["linux"]
url: "https://new.carta.tech/lua50"
---

# lua50(1)

Lua interpreter

## NAME

lua - Lua interpreter

## SYNOPSIS

**lua** \[ *options* \] \[ *script* \[ *args* \] \]

## DESCRIPTION

**lua** is the stand-alone Lua interpreter. It loads and executes Lua programs, either in textual source form or in precompiled binary form. (Precompiled binaries are output by **luac**, the Lua compiler.) **lua** can be used as a batch interpreter and also interactively.

The given *options* (see below) are executed and then the Lua program in file *script* is loaded and executed. The given *args* are available to *script* as strings in a global table named **arg**. If these arguments contain spaces or other characters special to the shell, then they should be quoted (but note that the quotes will be removed by the shell). The arguments in **arg** start at 0, which contains the string \`*script*'. The index of the last argument is stored in **arg.n**. The arguments given in the command line before *script*, including the name of the interpreter, are available in negative indices in **arg**.

At the very start, before even handling the command line, **lua** executes the contents of the environment variable **LUA\_INIT**, if it is defined. If the value of **LUA\_INIT** is of the form \`@*filename*', then *filename* is executed. Otherwise, the string is assumed to be a Lua statement and is executed.

Options start with **-** and are described below. You can use **--** to signal the end of options.

If no arguments are given, then **-v -i** is assumed when the standard input is a terminal; otherwise, **-** is assumed.

In interactive mode, **lua** prompts the user, reads lines from the standard input, and executes them as they are read. If a line does not contain a complete statement, then a secondary prompt is displayed and lines are read until a complete statement is formed or a syntax error is found. So, one way to interrupt the reading of an incomplete statement is to force a syntax error: adding a **\`;'** in the middle of a statement is a sure way of forcing a syntax error (except inside multiline strings and comments; these must be closed explicitly). If a line starts with **\`='**, then **lua** displays the values of all the expressions in the remainder of the line. The expressions must be separated by commas. The primary prompt is the value of the global variable **\_PROMPT**, if this value is a string; otherwise, the default prompt is used. Similarly, the secondary prompt is the value of the global variable **\_PROMPT2**. So, to change the prompts, set the corresponding variable to a string of your choice. You can do that after calling the interpreter or on the command line with **\_PROMPT**=´lua: ´**,** for example. (Note the need for quotes, because the string contains a space.) The default prompts are \`\`\> '' and \`\`\>\> ''.

## OPTIONS

- **-**

  load and execute the standard input as a file, that is, not interactively, even when the standard input is a terminal.

- **-e** *stat*

  execute statement *stat*. You need to quote *stat* if it contains spaces, quotes, or other characters special to the shell.

- **-i**

  enter interactive mode after *script* is executed.

- **-l** *file*

  call **require(***file***)** before executing *script.* Typically used to load libraries (hence the letter *l*).

- **-v**

  show version information.

- **-P**

  suppress the creation of a standard LUA\_PATH variable. Use this if you need to run scripts which conflict with system-installed libraries.

## SEE ALSO

[**luac**(1)](/luac/1.md)\
 http://www.lua.org/

## DIAGNOSTICS

Error messages should be self explanatory.

## AUTHORS

R. Ierusalimschy, L. H. de Figueiredo, and W. Celes

**\<lua@tecgraf.puc-rio.br\>**

Debian modifications to the manpage by Daniel Silverstone

**\<dsilvers@debian.org\>**
