7 Lua スタンドアローン

Lua はホストの C プログラムに埋め込んで使う拡張言語として設計されていますが、スタンドアローンの言語として使われることもよくあります。スタンドアローン言語 Lua のインタープリタは lua という名前であり、標準ディストリビューションに含まれます。このスタンドアローンインタープリタには全ての標準ライブラリが含まれます。使い方は次の通りです:

lua [options] [script [args]]

オプションを示します:

オプションの処理が終わると、lua は与えられた script を実行します。引数を与えずに lua を呼び出すと、標準入力 (stdin) がターミナルなら lua -v -i が実行され、それ以外の場合は lua - が実行されます。

オプション -E がないとき、インタープリタは引数を実行する前に LUA_INIT_5_4 を確認します (LUA_INIT_5_4 が定義されていないときはバージョンの付いていない LUA_INIT も確認します)。この変数の値が @filename という形をしているなら filename が実行され、そうでないときは文字列そのものが実行されます。

オプション -E があるとき Lua は環境変数を一切使いません。特に package.pathpackage.cpathluaconf.h で定義されるデフォルトのパスに設定されます。

オプション -e, -l, -W はコマンドにある順番で処理されます。例えば lua

$ lua -e 'a=1' -llib1 script.lua

と起動すると、まず a に 1 が代入され、それからライブラリ lib1 が require され、最後にファイル script.lua が引数無しに実行されます (ここで $ はシェルのプロンプトであり、シェルによって異なります)。

lua はコードの実行を開始する前にコマンドライン引数を全て収集し、グローバルなテーブル arg に格納します。スクリプトの名前がインデックス 0、スクリプトの名前の後にある最初の引数がインデックス 1 となり、以下同様です。スクリプト名の前にある引数 (インタープリタの名前とその引数) は負のインデックスを持ちます。例えば lua

$ lua -la b.lua t1 t2

と呼び出すと、arg テーブルは次のように設定されます:

arg = { [-2] = "lua", [-1] = "-la",
        [0] = "b.lua",
        [1] = "t1", [2] = "t2" }

lua の呼び出しにスクリプトが含まれなければ、インタープリタの名前がインデックス 0 に入り、その他の引数がその後に続きます。例えば lua

$ lua -e "print(arg[1])"

と起動すると -e が出力されます。呼び出しにスクリプトがあれば、そのスクリプトが arg[1], ..., arg[#arg] を引数として呼ばれます。Lua における他のチャンクと同じように、スクリプトは可変長引数関数としてコンパイルされます。

対話モードの Lua はユーザーからの行入力を待ちます。行を読み込むと、まず Lua はそれを式として解釈します。これが成功すれば、その値を出力します。失敗すれば、次は行を文として解釈します。不完全な文を入力した場合には、インタープリタはもう一度プロンプトを出して文の完成を待ちます。

グローバル変数 _PROMPT が文字列を持つなら、その値がプロンプトとして使われます。同様にグローバル変数 _PROMPT2 が文字列を持つなら、その値が二段階目のプロンプト (不完全な文を読み込んだときに起動されるプロンプト) として使われます。

スクリプトで保護されていないエラーが起こった場合には、インタープリタはエラーを標準エラー出力に報告します。エラーオブジェクトが __tostring メタメソッドを持った文字列でないオブジェクトである場合には、インタープリタは __tostring を呼んでユーザーに示す最終的なメッセージを生成します。そうでない場合インタープリタはエラーオブジェクトを文字列に変換し、それにスタックトレースバックを付けます。警告が有効なときは、警告は標準エラー出力にそのまま表示されます。

インタープリタが通常終了するとき、メイン Lua ステートはクローズ (lua_close) されます。スクリプトで os.exit を呼んで終了すればこのステップを飛ばせます。

Unix システムで Lua を スクリプトインタープリタとして使えるように、Lua はファイルチャンクの一行目が # で始まる場合それを無視します。これにより #! で始まるファイルに chmod +x することで Lua スクリプトを実行可能なプログラムにできます。例えば最初の行を次のようにします:

#!/usr/local/bin/lua

もちろん Lua インタープリタの場所はマシンによって異なるので、luaPATH にあることが分かっている場合には最初の行を

#!/usr/bin/env lua

とした方がよりポータブルになります。